我已经看过类似的问题,但我的情况与其他情况有所不同。
我有一个main
类,用于创建child
类的实例。 child
类需要有一个计时器来每1毫秒执行一次特定操作。我的问题是 timer 超时操作不会发生。
class mainWindow : public QMainWindow
{
private:
child *Child;
public:
void action()
{
QThread *childThread = new QThread(this);
Child = new child();
child->moveToThread(childThread);
childThread->start();
Child->action();
}
}
class child : public QObject
{
Q_OBJECT
protected:
void timerEvent (QTimerEvent *){/*some code here*/}
public:
void action()
{
this->startTimer(1);
}
}
任何帮助将不胜感激,
提前谢谢
如果您需要更多信息,请与我们联系
答案 0 :(得分:0)
必须在该对象的线程中执行child->action
调用。有两种方法可以解决它:
在将child
对象移动到其线程之前启动计时器。计时器将在新线程中重新启动。
QThread *childThread = new QThread(this);
Child = new child();
Child->action();
Child->moveToThread(childThread);
childThread->start();
在action
的线程上下文中调用child
位置:
QMetaObject::invokeMethod(child, "action");