如何使用QTimer
在Qt中,我试图设置一个如何使用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-&
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...
...