Qt 中定时器事件

定时器是用来处理周期性事件的一种对象,类似于硬件定时器。例如设置一个定时器的定时周期为 1000 毫秒,那么每 1000 毫秒就会发射定时器的 timeout() 信号,在信号关联的槽函数里就可以做相应的处理。

定时器实例程序运行示意图

在这里插入图片描述
要使用定时器,需要添加QTimer类
#include

1.窗口类添加定义(忽略非相关定义):
class Dialog : public QDialog
{
private:
QTimer *fTimer; //定义一个定时器fTimer
QTime fTimeCounter;// 定义一个计时器fTimeCounter

private slots:
void on_timer_timeout () ; //定义一个槽函数timeout,作为定时器的timeout()
信号的响应槽函数
};

2.在窗口类的构造函数里创建定时器,并进行信号与槽的关联:
Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog)
{
ui->setupUi(this);
fTimer=new QTimer(this);
fTimer->stop();
fTimer->setInterval (1000) ;//设置定时周期,单位:毫秒
connect(fTimer,SIGNAL(timeout()),this,SLOT(on_timer_timeout()));
}

3.槽函数 on_timer_timeout() 的实现代码如下:
void Dialog::on_timer_timeout()
{
//定时器中断响
//使用QTime 类的静态函数Qtime::currentTime() 获取当前时间
QTime curTime=QTime::currentTime();
ui->LCDHour->display (curTime.hour()); //显示小时
ui->LCDMin->display (curTime.minute()); //显示分钟
ui->LCDSec->display(curTime.second()); //显示秒
int va=ui->progressBar->value();
va++;
if (va>100)//循环更新 progressBar 的值,是为了让界面有变化,表示定时器在运行。
va=0;
ui->progressBar->setValue(va);
}

4.QTimer::start() 函数用于启动定时器,界面上的“开始”按钮代码如下:
void Dialog::on_btnStart_clicked()
{
fTimer->start () ;//定时器开始工作
fTimeCounter.start () ; //计时器开始工作
ui->btnStart->setEnabled(false);
ui->btnStop->setEnabled(true);
ui->btnSetIntv->setEnabled(false);
}
计时器 fTimeCounter 执行 start() 是将当前时间作为计时器的时间。

5.QTimer::Stop() 函数停止定时器,界面上的“停止”按钮可实现这一功能,其代码如下:
void Dialog::on_btnStop_clicked()
{
fTimer->stop () ; //定时器停止
int tmMsec=fTimeCounter.elapsed() ;//毫秒数
int ms=tmMsec%1000;
int sec=tmMsec/1000;
QString str=QString::asprintf (“流逝时间:%d 秒,%d 毫秒”, sec, ms);
ui->LabElapsTime->setText(str);
ui->btnStart->setEnabled(true);
ui->btnStop->setEnabled(false);
ui->btnSetIntv->setEnabled(true);
}

猜你喜欢

转载自blog.csdn.net/weixin_43778462/article/details/106001511
今日推荐