定义定时器对象:QTimer *myTimer;
动态分部内存空间:myTimer = new QTimer(this)
;
启动定时器:myTimer->start(100)
;
定时器超时事件:QTimer::timeout()
停止定时器:myTimer->stop()
;
程序实现功能:通过Start按钮启动对象定时器,超时周期100ms,通过Stop按钮停止定时器.
1、头文件
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_buttonStart_clicked();
void on_buttonStop_clicked();
private:
Ui::Widget *ui;
QTimer myTimer;
};
#endif // WIDGET_H
在自动生成的文件中增加了一个头文件,两个槽函数和一个变量,增加内容如下:
#include <QTimer>
private slots:
void on_buttonStart_clicked();
void on_buttonStop_clicked();
QTimer myTimer;
2、ui文件修改
自动生成的ui文件如下:
从工具栏拖进来三个控件,并修改名称:
3、源文件修改
主要修改内容为构造函数中增加了Timer赋值和创建connect连接。实现了2个槽函数。
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
myTimer = new QTimer(this);
connect(myTimer, &QTimer::timeout,[=](){
static int i = 0;
i++;
ui->lcdNumber->display(i);
});
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_buttonStart_clicked()
{
// start timer with time interval 100ms
// each 100ms myTimer emit signal to timeout()
// if timer not activated, then activate in case of multitime
// click Start button
if(myTimer->isActive() == false)
{
myTimer->start(100);
}
}
// click Stop button to stop
void Widget::on_buttonStop_clicked()
{
if(myTimer->isActive() == true)
{
myTimer->stop();
}
}
4、编译执行效果
先Start然后Stop,效果如下
5、分析代码
代码的主要部分是这里:
参考上面的代码设置为触发时间间隔是100ms,所以每100ms就会触发这个函数执行,i自动加1并显示到lcdNumber控件上。
connect(myTimer, &QTimer::timeout,[=](){
static int i = 0;
i++;
ui->lcdNumber->display(i);
});