如何让Qt 的程序等待一段时间(等待的同时,还让主界面刷新图片)good

时间:2021-01-01 15:25:41

后面这种方法可以不影响其他线程的响应,又可以达到等待的目的。

测试的一个小例子:

 

[cpp]  view plain  copy
 
  1. class Widget : public QWidget  
  2. {  
  3.     Q_OBJECT  
  4.   
  5. public:  
  6.     Widget(QWidget *parent = 0);  
  7.     ~Widget();  
  8.   
  9.     QLabel *label;  
  10. };  
[cpp]  view plain  copy
 
  1. Widget::Widget(QWidget *parent)  
  2.     : QWidget(parent)  
  3. {  
  4.     label = new QLabel(this);  
  5.     label->resize(800,480);  
  6.     label->show();  
  7. }  
  8.   
  9. Widget::~Widget()  
  10. {  
  11.     delete label;  
  12. }  
[cpp]  view plain  copy
 
  1. #include <QPixmap>  
  2. #include <QTimer>  
  3. #include <QDebug>  
  4. #include <QThread>  
  5. #include <QEventLoop>  
  6.   
  7. int main(int argc, char *argv[])  
  8. {  
  9.     QApplication a(argc, argv);  
  10.     Widget w;  
  11.     w.show();  
  12.   
  13.     static const char *pic[4] = {   //这个数组的用法很巧妙吧  
  14.         ":/new/prefix1/pic/Bottom Panel v1.3-compare-01.png",  
  15.         ":/new/prefix1/pic/Bottom Panel v1.3-compare-02.png",  
  16.         ":/new/prefix1/pic/Bottom Panel v1.3-compare-03.png",  
  17.         ":/new/prefix1/pic/Bottom Panel v1.3-compare-04.png",  
  18.     };  
  19.   
  20.     while(1)  
  21.     {  
  22.         for(int i = 0; i < 4; i ++)  
  23.         {  
  24.             w.label->setPixmap(QPixmap(pic[i]));  
  25.             qDebug()<<"i:"<<i;  
  26.   
  27.             //QThread::sleep(2);  // 这样写label上的图片就无法正常刷新,换用下面的的eventloop就OK了  
  28.             QEventLoop eventloop;  
  29.             QTimer::singleShot(2000, &eventloop, SLOT(quit())); //wait 2s  
  30.             eventloop.exec();  
  31.         }  
  32.     }  
  33.   
  34.     return a.exec();  
  35. }  
 
 

http://blog.csdn.net/zzwdkxx/article/details/47280975