我想实现的功能是:读取在一个文件夹中的所有图片,并每隔2s显示下一张图片。我是用sleep(2)来实现的。但程序运行后,点击“自动播放按钮”,就死在那不动了。qt4不能用sleep函数吗?还是哪出啥问题了?如果不能的话,那应该用什么函数?
/*类的声明*/
class Imagewindow :public QMainWindow
{
Q_OBJECT
public:
Imagewindow() ;
public slots:
void autoplay();
private:
void createActions() ;
void createToolBars();
QStringList imageList ;
int index ;
QDir imageDir ;
QToolBar *operToolBar;
QAction *autoplayAct;
QScrollArea *scrollArea ;
Imageviewer *image;
};
/*类的定义*/
Imagewindow::Imagewindow()
{
/*自已定义的专门用来显示图片的窗口的类,它改写了paintEvent 函数,这个类我测过,没问题的*/
image = new Imageviewer;
scrollArea = new QScrollArea ;
scrollArea -> setWidget(image);
setCentralWidget(scrollArea);
createActions();
createToolBars();
imageDir.setPath("/mnt/hgfs/share_file/qt_image") ;
QStringList filter ;
filter << "*.jpg" << "*.bmp" << "*.jpeg" << "*.png" << "*.xpm" ;
imageList = imageDir.entryList(filter, QDir::Files |QDir::NoSymLinks,QDir::Name) ;
image->setPixmap(imageDir.absolutePath() + QDir::separator()+ imageList.at(0)) ;
index = 0 ;
}
void Imagewindow::autoplay() //自动播放功能
{
while(1)
{
if(index < imageList.size()-1 )
{
image->setPixmap(imageDir.absolutePath() +QDir::separator()+ imageList.at(index)) ;
index ++ ;
}
else
index = 0;
sleep(2) ; //问题所在
}
}
void Imagewindow::createActions()
{
autoplayAct = new QAction(QIcon("./images/apply.png"),tr("Autoplay"),this) ;
connect(autoplayAct,SIGNAL(triggered()),this,SLOT(autoplay())) ;
}
void Imagewindow::createToolBars()
{
operToolBar = addToolBar(tr("operation"));
operToolBar -> addAction(autoplayAct) ; //自动播放按钮
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Imagewindow *pWidget = new Imagewindow;
pWidget->resize(300, 300);
pWidget->show();
return app.exec();
}