打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

Qt 中的定时器类是 QTimer。QTimer 不是一个可见的界面组件,在 UI 设计器的组件面板里找不到它。图 1 中的实例程序实现了一个计时器的功能,就是计算定时器开始到停止持续的时间长度,计时器是 QTime 类。


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

QTimer 主要的属性是 interval,是定时中断的周期,单位毫秒。QTimer 主要的信号是 timeout(),在定时中断时发射此信号,要想在定时中断里做出响应,这就需要编写 timeout() 信号的槽函数。下面是窗口类中增加的定义(省略了其他不相关的定义):
  1. class Dialog : public QDialog

  2. {

  3. private:

  4. QTimer *fTimer; //定时器

  5. QTime fTimeCounter;//计时器

  6. private slots:

  7. void on_timer_timeout () ; //定时溢出处理槽函数

  8. };

这里定义了一个定时器 fTimer,—个计时器 fTimeCounter。还定义了一个槽函数 on_timer_ timeout(),作为定时器的 timeout() 信号的响应槽函数。

需要在窗口类的构造函数里创建定时器,并进行信号与槽的关联。代码如下:
  1. Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog)

  2. {

  3. ui->setupUi(this);

  4. fTimer=new QTimer(this);

  5. fTimer->stop();

  6. fTimer->setInterval (1000) ;//设置定时周期,单位:毫秒

  7. connect(fTimer,SIGNAL(timeout()),this,SLOT(on_timer_timeout()));

  8. }

槽函数 on_timer_timeout() 的实现代码如下:
  1. void Dialog::on_timer_timeout()

  2. {

  3. //定时器中断响

  4. QTime curTime=QTime::currentTime(); //获取当前时间

  5. ui->LCDHour->display (curTime.hour()); //显示小时

  6. ui->LCDMin->display (curTime.minute()); //显示分钟

  7. ui->LCDSec->display(curTime.second()); //显示秒

  8. int va=ui->progressBar->value();

  9. va++;

  10. if (va>100)

  11. va=0;

  12. ui->progressBar->setValue(va);

  13. }

这段代码首先用 QTime 类的静态函数 Qtime::currentTime() 获取当前时间,然后用 QTime 的成员函数 hour()、minute()、second() 分别获取小时、分钟、秒,并在几个 LCDNumber 组件上显不。循环更新 progressBar 的值,是为了让界面有变化,表示定时器在运行。

设置定时器的周期,只需调用 Qtimer::setlnterval() 函数即可。

QTimer::start() 函数用于启动定时器,界面上的“开始”按钮代码如下:
  1. void Dialog::on_btnStart_clicked()

  2. {

  3. fTimer->start () ;//定时器开始工作

  4. fTimeCounter.start () ; //计时器开始工作

  5. ui->btnStart->setEnabled(false);

  6. ui->btnStop->setEnabled(true);

  7. ui->btnSetIntv->setEnabled(false);

  8. }

计时器 fTimeCounter 执行 start() 是将当前时间作为计时器的时间。

QTimer::Stop() 函数停止定时器,界面上的“停止”按钮可实现这一功能,其代码如下:
  1. void Dialog::on_btnStop_clicked()

  2. {

  3. fTimer->stop () ; //定时器停止

  4. int tmMsec=fTimeCounter.elapsed() ;//毫秒数

  5. int ms=tmMsec%1000;

  6. int sec=tmMsec/1000;

  7. QString str=QString::asprintf ("流逝时间:%d 秒,%d 毫秒", sec, ms);

  8. ui->LabElapsTime->setText(str);

  9. ui->btnStart->setEnabled(true);

  10. ui->btnStop->setEnabled(false);

  11. ui->btnSetIntv->setEnabled(true);

  12. }

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Qt小案例——时间模块
QTimer定时器以及QTime获取时间
Qt对定时及时间系统的处理
QT中定时器使用办法
Qt——线程与定时器
QT 中的sleep
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服