Comment utiliser QTimer

Qt je suis en train de définir un QTimer cela appelle une fonction appelée "update" chaque seconde. Voici mon .fichier cpp:

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

et dans le main:

#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

le projet est en cours de construction, mais il n'exécute pas la mise à jour, puisque la ligne "update" n'apparaît nulle part... N'est ce que quelqu'un voit ce que je fais de mal?

18
demandé sur troyane 2012-07-25 18:17:43

2 réponses

  1. c'est une bonne pratique de donner un parent à votre QTimer pour utiliser le système de gestion de la mémoire de Qt.

  2. update() est un QWidget la fonction est que ce que vous essayez d'appeler ou pas? http://qt-project.org/doc/qt-4.8/qwidget.html#update.

  3. Si 2 ne s'applique pas, assurez-vous que la fonction que vous essayez d'déclencheur est déclarée comme une fente dans le tête.

  4. enfin, si aucune de ces erreurs ne vous concerne, il serait utile de savoir si vous avez des erreurs de connexion à l'exécution.

11
répondu MrFox 2017-02-28 09:06:26

L'autre moyen est l'utilisation de la méthode intégrée 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...";
}
10
répondu fpohtmeh 2013-12-26 00:54:00