QTimer超时信号未发出

时间:2015-05-06 16:07:09

标签: qt

我有一个名为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问题的帖子,但显然这有点不同。

1 个答案:

答案 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精确定时器试图保持毫秒精度

不确定他们是否是完全相同的问题,但你可以尝试一下。