How to use QTimer

In Qt I'm trying to set a QTimer that calls a function called "update" every second. Here is my .cpp file:

#include "mainwindow.h" #include "ui_mainwindow.h" #include <QTimer> #include "QDebug" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(update())); timer->start(1000); } MainWindow::~MainWindow() { delete ui; } void MainWindow::update() { qDebug() << "update"; } 

and the main:

#include <QtGui/QApplication> #include "mainwindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } 

The project is being build, but it doesn't execute update, since the line "update" is not showing anywhere... Does anybody see what I´m doing wrong?

4

3 Answers

Other way is using of built-in method start timer & event TimerEvent.

Header:

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; int timerId; protected: void timerEvent(QTimerEvent *event); }; #endif // MAINWINDOW_H 

Source:

#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); timerId = startTimer(1000); } MainWindow::~MainWindow() { killTimer(timerId); delete ui; } void MainWindow::timerEvent(QTimerEvent *event) { qDebug() << "Update..."; } 
2
  1. It's good practice to give a parent to your QTimer to use Qt's memory management system.

  2. update() is a QWidget function - is that what you are trying to call or not? .

  3. If number 2 does not apply, make sure that the function you are trying to trigger is declared as a slot in the header.

  4. Finally if none of these are your issue, it would be helpful to know if you are getting any run-time connect errors.

3

mytimer.h:

 #ifndef MYTIMER_H #define MYTIMER_H #include <QTimer> class MyTimer : public QObject { Q_OBJECT public: MyTimer(); QTimer *timer; public slots: void MyTimerSlot(); }; #endif // MYTIME 

mytimer.cpp:

#include "mytimer.h" #include <QDebug> MyTimer::MyTimer() { // create a timer timer = new QTimer(this); // setup signal and slot connect(timer, SIGNAL(timeout()), this, SLOT(MyTimerSlot())); // msec timer->start(1000); } void MyTimer::MyTimerSlot() { qDebug() << "Timer..."; } 

main.cpp:

#include <QCoreApplication> #include "mytimer.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // Create MyTimer instance // QTimer object will be created in the MyTimer constructor MyTimer timer; return a.exec(); } 

If we run the code:

Timer... Timer... Timer... Timer... Timer... ... 

resources

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like