QTimer不会触发

时间:2015-12-10 22:43:20

标签: c++ qt qt5 signals-slots qtimer

我正在尝试让QTimer运行,但它永远不会触发。 我发现了一些关于计时器的其他问题,但问题始终是计时器超出范围。在我的小例子中并非如此:

我在自定义QMainWindow中创建了计时器,这是.h文件:

#include <iostream>
#include <QtWidgets/QMainWindow>
#include <QTimer>

class MyMainWindow : public QMainWindow {
    Q_OBJECT;

private:
    QTimer *mainTimer;

public slots:
    void timerUpdate();

public:
    MyMainWindow();
};

这是.cpp文件:

#include "MyMainWindow.h"

MyMainWindow::MyMainWindow() {
    QMainWindow();
    mainTimer = new QTimer(this);
    connect(mainTimer, SIGNAL(timeout()), this, SLOT(update()));
    mainTimer->start(1000);
    std::cout << "Timer created.\n";
}

void MyMainWindow::timerUpdate() {
    std::cout << "test";
}

最后,这是我的main.cpp:

#include <QtWidgets/QApplication>
#include "MyMainWindow.h"

int main(int argc, char* argv[]) {
    QApplication app(argc, argv);

    MyMainWindow mmw;
    mmw.show();

    return app.exec();
}

当我执行此代码时,我只获得“Timer created”。从不“测试”。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您正在连接SLOT(update()),但您的功能称为timerUpdate

使用更现代的Qt 5 signal-slot connection syntax,这种情况永远不会发生,并且在编译时会出现错误。你应该更喜欢使用它。