定时器1
使用定时器:
- 打开定时器。规定间隔时间,单位是毫秒,意思就是每隔一个时间就会去执行定时器事件的函数,并且每个定时器都有唯一的ID标识,这样就可以设置多个定时器了
- 重写父类的虚函数,定时器函数,最好加上override,防止函数名写错
- 定时器的参数可以判断定时器的ID号,从而知道是那个定时器调用的函数。
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//在构造函数中启动定时器
//第一个参数时间隔时间,单位毫秒
//每启动一个定时器都对应着一个定时器的ID号,就是函数的返回值
id1 = startTimer(1000);
id2 = startTimer(200);
}
//根据定时器,每隔对应的时间会调用一次函数
void Widget::timerEvent(QTimerEvent *e)
{
static int num1 = 1;
static int num2 = 1;
//要判断是哪个定时器的计数
if (e->timerId() == id1)
{
ui->label->setText(QString::number(num1++));
}
if (e->timerId() == id2)
{
ui->label_2->setText(QString::number(num2++));
}
}
定时器2
第二种方式不用重写父类的虚函数,Qt提供了QTimer这个类,我们也可以直接用它来实现定时。使用时需要先创建定时器的对象,如果需要多个定时器,就创建多个对象。
QTimer* time1 = new QTimer(this);
time1->start(1000);
connect(time1, &QTimer::timeout, [=]()
{
static int num = 1;
ui->label_3->setText(QString::number(num++));
});
这种写法特别简单,更推荐使用。start是开始,stop是停止计数,单位仍然是毫秒,在本例中没经过1000ms,就会触发一次timeout信号,所以使用信号和曹连接一下。