关于定时器,qt中有两种实现方式:
1-基于QObject的startTimer接口,int QObject::startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer),第一个参数是时间间隔(毫秒单位),该接口返回一个定时器的ID,后面关闭定时器或者定时器响应函数需要用到,记得保存该ID。
在头文件中,需要重写timerEvent虚函数,当定时器事件发生时触发。
protected:
void timerEvent(QTimerEvent *event);
private:
int iTimerID1,iTimerID2;//声明两个定时器ID
在源文件中:
iTimerID1=startTimer(2000);
iTimerID2=startTimer(3000);
void MainWindow::timerEvent(QTimerEvent *event)
{
if(event->timerId()==iTimerID1)
{
qDebug()<<"计时器1";
}
else if(event->timerId()==iTimerID2)
{
qDebug()<<"计时器2";
}
}
在需要关闭定时器时,调用killTimer接口,传入对应的定时器ID即可:
killTimer(iTimerID1);
2-另一种方式,是用的QTimer类,并通过给timeout信号设置槽函数完成:
在头文件中:
private:
QTimer *timer;//声明一个QTimer类对象
private slots:
void slottimefun();//声明一个定时信号槽函数
在源文件中:
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(slottimefun()));//把timeout信号和自定义槽函数连接
timer->start(1000);//启动定时器,毫秒单位
//使用qsrand()设置一个不同的初值。这里使用了QTime类的secsTo()函数,它表示两个时间点之间所包含的秒数,比如下面就是指从零点整到当前时间所经过的秒数
qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
void MainWindow::slottimefun()
{
int rand = qrand() % 100;// 产生100以内的正整数
ui->progressBar->setValue(rand);//设置进度条数值
// 设置时间为现在的系统时间
ui->dateTimeEdit->setDateTime(QDateTime::currentDateTime());
}

本文介绍了QT中两种定时器的实现方式。一种是利用QObject的startTimer接口,重写timerEvent函数,另一种是使用QTimer类结合timeout信号和槽函数。在关闭定时器时,可以通过killTimer或QTimer对象的stop方法。

864

被折叠的 条评论
为什么被折叠?



