我正在尝试实现QT Qthread的sleep函数,所以我在头文件中声明为 –
namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); static void sleep(unsigned long secs){QThread::sleep(secs);} protected: void changeEvent(QEvent *e); private: Ui::MainWindow *ui; private slots: void on_pushButton_clicked(); };
在我的源代码中我正在做的是在连接到数据库之后,我想要一个标签来改变背景颜色(有点像发光效果),所以我尝试从一个while(true)循环内部调用sleep函数.
while(db.open()) { MainWindow::sleep(13); qDebug()<<"Success "; ui->glow_label->setStyleSheet("QLabel {background-color: rgb(0,255,0);}"); MainWindow::sleep(5); ui->glow_label->setStyleSheet("QLabel {background-color: rgb(0,85,255);}"); }
/usr/local/Trolltech/Qt-4.8.4/include/QtCore/qthread.h:115:错误:’static void QThread :: sleep(long unsigned int)’受保护
/home/aj/MY_QT_WORK/timer_test/mainwindow.h:22:错误:在此上下文中
我做错了什么想法?
解决方法
在主线程中使用sleep()是个坏主意,因为它会阻塞所有GUI线程. Qt测试库对于生产而言太重了.因此,请尝试仅使用QTimer或尝试以下方法:
void sleep(qint64 msec) { QEventLoop loop; QTimer::singleShot(msec,&loop,SLOT(quit())); loop.exec(); }