QTimerEvent类用来描述一个定时器。对于一个QObject类的子类,只需要使用int QObject::startTimer(int interval)函数来开启一个定时器,这个函数需要输入一个以毫秒为单位的整数作为参数来表示设定的时间,它返回一个整形标号来表示这个定时器。当定时器溢出时就可以在tImerEvent函数中获取改定时器的编号来进行相关的操作。
新建Qt Gui应用,将项目名称改为myTimerEvent,基类选择为QWidget,然后类名保持Widget不变。项目工程如下所示:
各个文件下的代码如下所示:
widget.h代码如下:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
protected:
void timerEvent(QTimerEvent *event);
private:
Ui::Widget *ui;
int id1,id2,id3;
};
#endif // WIDGET_H
main.cpp如下:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.cpp:如下
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
id1 = startTimer(1000);
id2 = startTimer(2000);
id3 = startTimer(3000);
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *event)
{
// 判断是哪个定时器
if(event->timerId() == id1){
qDebug() << "timer1";
}
if(event->timerId() == 2){
qDebug() << "timer2";
}
if (event->timerId() == id3){
qDebug() << "timer3";
qDebug() << "id1="<< id1;
qDebug() << "id2="<< id2;
qDebug() << "id3="<< id3;
//我们观察startTimer()函数返回的值
}
}
编译之后应用程序输出如下:
可以看出:
1>startTimer()函数返回的是整形数值。
2><pre name="code" class="html">void timerEvent(QTimerEvent *event);函数为中断处理函数,可以根据那个定时器执行响应的操作。