我正在尝试在工作线程的事件循环中启动计时器,但出现此错误:
QObject::startTimer: Timers can only be used with threads started with QThread
这有什么问题?
#include <QObject>
#include <QThread>
#include <QTimer>
class A : public QObject
{
Q_OBJECT
public:
A();
private:
QThread m_workerThread;
QTimer m_myTimer;
};
A::A()
{
this->moveToThread(&m_workerThread);
m_myTimer.moveToThread(&m_workerThread);
m_workerThread.start();
m_myTimer.start(1000);
}
Run Code Online (Sandbox Code Playgroud)
我想我明白了,我尝试从 GUI 线程启动计时器,在我将其移动到工作线程后,这样它似乎可以工作:
class A : public QObject
{
Q_OBJECT
public:
A();
private:
QThread m_workerThread;
QTimer m_myTimer;
public slots:
void sl_startTimer();
};
A::A()
{
this->moveToThread(&m_workerThread);
m_myTimer.moveToThread(&m_workerThread);
m_workerThread.start();
QMetaObject::invokeMethod(this, "sl_startTimer", Qt::QueuedConnection);
}
void A::sl_startTimer()
{
m_myTimer.start(1000);
}
Run Code Online (Sandbox Code Playgroud)