QTimer在非QThread的环境下能正常工作。但在QThread环境下,需要做一些改动才能正常工作。
创建Qt的线程有两种方式:
1. 子例化QThread
可以在虚函数run中启动定时器,大致的代码如下:
//构造函数,继承QThread Thread::Thread(QObject *parent) : QThread(parent) { } void Thread::run() { QTimer* timer = new QTimer; //多线程环境中,此处设父指针为this,会导致创建线程失败,定时器可用 connect(timer, SIGNAL(timeout()), this, SLOT(display())); timer->start(1000); exec(); //开启事件循环 } //调用,启动线程 Thread* thread = new Thread; //此处设父指针为this,关闭应用程序时会发生崩溃 thread->start();