如何使用QTimer

如何使用QTimer,qt,timer,Qt,Timer,在Qt中,我试图设置一个QTimer,它每秒调用一个名为“update”的函数。这是我的.cpp文件: #include "mainwindow.h" #include "ui_mainwindow.h" #include <QTimer> #include "QDebug" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui-&

在Qt中,我试图设置一个
QTimer
,它每秒调用一个名为“update”的函数。这是我的.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";
}
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括
#包括“QDebug”
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
QTimer*定时器=新的QTimer(此);
连接(计时器、信号(超时())、此、插槽(更新());
定时器->启动(1000);
}
MainWindow::~MainWindow()
{
删除用户界面;
}
void MainWindow::update()
{
qDebug()
  • 给您的
    QTimer
    一个家长使用Qt的内存管理系统是一个很好的做法

  • update()
    是一个QWidget函数-这就是您试图调用的函数吗

  • 如果数字2不适用,请确保您尝试触发的函数在标头中声明为插槽

  • 最后,如果这些都不是您的问题,那么了解您是否遇到任何运行时连接错误将很有帮助


  • 另一种方法是使用内置的启动计时器和事件计时器

    标题:

    #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
    
    \ifndef主窗口
    #定义主窗口
    #包括
    名称空间用户界面{
    类主窗口;
    }
    类主窗口:公共QMainWindow
    {
    Q_对象
    公众:
    显式主窗口(QWidget*parent=0);
    ~main窗口();
    私人:
    Ui::MainWindow*Ui;
    int-timerId;
    受保护的:
    无效timerEvent(QTTimeRevent*事件);
    };
    #endif//main窗口
    
    资料来源:

    #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...";
    }
    
    #包括“mainwindow.h”
    #包括“ui_main window.h”
    #包括
    主窗口::主窗口(QWidget*父窗口):
    QMainWindow(父级),
    用户界面(新用户界面::主窗口)
    {
    用户界面->设置用户界面(此);
    timerId=startTimer(1000);
    }
    MainWindow::~MainWindow()
    {
    killTimer(timerId);
    删除用户界面;
    }
    void主窗口::timerEvent(QTimerEvent*事件)
    {
    qDebug()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
    

    您正在调用
    app.exec()
    (或者您调用的
    QApplication
    )从
    main
    ?您也在创建内存泄漏,请将
    this
    添加到
    QTimer
    构造函数中。我添加了我的主代码。将其添加到构造函数中并没有解决问题。@cmannett85如果内存泄漏,MainWindow将获得计时器的所有权,当删除MainWindow对象时,这将删除t他在他的析构函数上设置了计时器。修复了它。函数update()显然不是函数的最佳选择…当我更改它时,它已修复。
    update()
    多次重载,但“原始”签名不带参数(在链接的页面上稍微向上滚动)。请修改您的答案。
    update
    slot name对我来说很好。可能该函数尚未声明为slot?我尝试了一切让QTimer工作,但没有成功。但这立即起作用,谢谢!!这正是我正在寻找的时间。立即成功。谢谢。
        #ifndef MYTIMER_H
        #define MYTIMER_H
    
        #include <QTimer>
    
        class MyTimer : public QObject
        {
            Q_OBJECT
        public:
            MyTimer();
            QTimer *timer;
    
        public slots:
            void MyTimerSlot();
        };
    
        #endif // MYTIME
    
    #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...";
    }
    
    #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();
    }
    
    Timer...
    Timer...
    Timer...
    Timer...
    Timer...
    ...