gpt4 book ai didi

qt - QObject::startTimer:定时器只能与以 QThread 启动的线程一起使用

转载 作者:行者123 更新时间:2023-12-02 00:34:35 25 4
gpt4 key购买 nike

我试图在工作线程的事件循环中启动计时器,但收到此错误:QObject::startTimer:计时器只能与以 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);
}

最佳答案

在任何地方初始化计时器,但在线程启动时立即启动它(将其附加到 QThread::started 信号):

class A : public QObject
{
Q_OBJECT
public:
A();

private slots:
void started();
void timeout();

private:
QThread m_workerThread;
QTimer m_myTimer;
};

A::A()
{
moveToThread(&m_workerThread);

connect(&m_workerThread, SIGNAL(started()), this, SLOT(started()));
connect(&m_myTimer, SIGNAL(timeout()), this, SLOT(timeout()));

m_myTimer.setInterval(1000);
m_myTimer.moveToThread(&m_workerThread);

m_workerThread.start();
}

void A::started()
{
timer.start();
}

void A::timeout()
{
// timer handler
}

关于qt - QObject::startTimer:定时器只能与以 QThread 启动的线程一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22399868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com