我有一个名为Updater的QObject子类,我想用它来管理我的应用程序中的一些小部件。我希望它每16毫秒运行一次updateDisp(),所以我在构造函数中创建了一个QTimer,并将超时信号连接到updateDisp()插槽。但是,updateDisp()永远不会运行,我不能为我的生活找出原因。
在updater.h中:
class Updater : public QObject {
Q_OBJECT
ToUpdate* toUpdate;
QTimer* timer;
...
public slots:
void updateDisp();
};
updater.cpp中的:
Updater::Updater(ToUpdate* t, QObject *parent)
: QObject(parent) {
toUpdate = t;
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(updateDisp()));
timer->setInterval(16);
timer->start();}
我在MainWindow.cpp中实例化一个Updater对象。另外,我将GUI线程与main()分开(使用winapi CreateThread());我看过其他关于QTimers和QThreads问题的帖子,但显然这有点不同。
答案 0 :(得分:1)
还有一些类似的问题。 我过去遇到了类似的问题:https://github.com/codelol/QtTimer/commit/cef130b7ad27c9ab18e03c15710ace942381c82a#commitcomment-10696869
基本上,Qt5计时器似乎没有按预期工作,而在后台,它与动画计时器同步......在后台不经常运行。
这家伙解决了将计时器类型设置为 Qt :: PreciseTimer 的类似问题 https://github.com/codelol/QtTimer/commit/cef130b7ad27c9ab18e03c15710ace942381c82a#commitcomment-10696869
timer->setTimerType(Qt::PreciseTimer);
计时器类型的说明:http://doc.qt.io/qt-5/qt.html#TimerType-enum
Qt :: PreciseTimer 0精确定时器试图保持毫秒精度
不确定他们是否是完全相同的问题,但你可以尝试一下。