方法一
使用 t i m e r E v e n t timerEvent timerEvent
[override virtual protected] void QTimer::timerEvent(QTimerEvent *e)
所以只需要在 W i d g e t . h Widget.h Widget.h里声明一下,然后去 W i d g e t . c p p Widget.cpp Widget.cpp实现即可
具体的操作写在函数 t i m e E v e n t timeEvent timeEvent中
但是怎么触发时间呢??我们需要激活一下,也就是
s t a r t T i m e r ( x ) startTimer(x) startTimer(x)
其中 x x x表示间隔 x m s x\ ms x ms触发一次
然后 s t a r t T i m e r startTimer startTimer会返回一个 i n t int int类型的数,根据这个可以判断当前是哪个定时器
比如下面,实现了在 L a b e l Label Label中不停增长数字
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
id1 = startTimer(100);
id2 = startTimer(1000);
}
void Widget::timerEvent(QTimerEvent *e)
{
if( e->timerId()==id1 )
{
static int num1 = 1;
ui->label_1->setText(QString::number(num1++));
}
if( e->timerId()==id2 )
{
static int num2 = 1;
ui->label_2->setText(QString::number(num2++));
}
}
Widget::~Widget()
{
delete ui;
}
方法二
使用类 Q T i m e r QTimer QTimer实例对象,靠发射信号来写
ui->setupUi(this);
QTimer *timer1 = new QTimer(this);
timer1->start(100);
connect(timer1,&QTimer::timeout,
[=]()
{
ui->label_1->setText(QString::number(id1++));
}
);
QTimer *timer2 = new QTimer(this);
timer2->start(1000);
connect(timer2,&QTimer::timeout,
[=]()
{
ui->label_2->setText(QString::number(id2++));
}
);
逻辑更加清晰
现在继续设置一个按钮,按下就停止计数
其实还是使用信号来写,用类 s t o p stop stop一下就好了
connect(ui->Btn1,&QPushButton::clicked,[=]()
{
timer2->stop();
}
);