Search code examples
c++qtqt5signals-slotsqtimer

QTimer doesn't trigger


I'm trying to get the QTimer running, but it never triggers. I found some other questions about the timer, but the problem was always the timer being out of scope. This is not the case in my small example:

I create the timer in a custom QMainWindow, this is the .h file:

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

class MyMainWindow : public QMainWindow {
    Q_OBJECT;

private:
    QTimer *mainTimer;

public slots:
    void timerUpdate();

public:
    MyMainWindow();
};

This is the .cpp file:

#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";
}

Finally, this is my 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();
}

When I execute this code, I only get "Timer created." and never "test".

Any suggestions?


Solution

  • You're connecting to SLOT(update()), but your function is called timerUpdate.

    Using more modern Qt 5 signal-slot connection syntax, that would never have happened and you'd get an error at compile-time. You should prefer using that.