千家信息网

[180511]基于QTime类和QTimer类实现的计时器

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,计时器首先上图界面构建主要是lcdnumber 和textbrowser首先实现计时功能,要用到QTime类。QTime类基础函数QTime(int h, int m, int s = 0, int
千家信息网最后更新 2024年11月23日[180511]基于QTime类和QTimer类实现的计时器

计时器

首先上图

界面构建主要是lcdnumber 和textbrowser
首先实现计时功能,要用到QTime类

QTime类

基础函数
QTime(int h, int m, int s = 0, int ms = 0)//构造函数

QTime addMSecs(int ms) const    //对时间进行增改当然还要相应的addSec函数int hour() const  //得到当前时间的小时,同理还有minute,second,msecint elapsed() const  //返回从暂停到重新开始流逝的时间int restart()和void start()  //重新开始和开始,注意restart有流逝时间的返回值int msecsTo(const QTime &t) const  //比较两个Qtime类的时间差值

静态成员

QTime currentTime()  //获取当前时间

QTimer类(计时器)

基础函数

void start(int msec)  //每多少毫秒发送一次信号void stop()  //停止发送信号

信号

void timeout()  //当休息时间结束时发送该信号

使用

QTimer *timer = new QTimer(this);connect(timer, SIGNAL(timeout()), this, SLOT(update()));//update()是你想要调用的函数,当然也不一定是非要this接受timer->start(1000);

实际上窗口的反复更新就是调用的Qtimer中的exec()函数来维持。但是反复更新带来了巨大的任务量,期待用线程的方式来解决(以后再谈)。
计时器分为精确型和粗糙型,但是无论是哪种计时器都依赖于它的操作系统和硬件性能。如果系统过忙不能保证计时器所有求的准确性,那么无论是哪种计时器都会发生偏差。


窗口的介绍

  1. LCDnumber:需要强调的是它无法获取显示的文本,如果的确需要文本,可以将它的display()函数连接一个槽函数。可以用来显示Qstring
  2. textbrowser:富文本编辑框,只读不可编辑。textedit类没有富文本可以编辑

功能的实现

  • 点击开始键,它要能开始计时。那么我在Mainwindow的构造函数中建一个Qtime对象,来记录开始键按下瞬间计算机当前时间。当我按下暂停或者停止的时候再建立一个Qtime的对象,两个对象比较差值,差值即为记录的时间。
  • 因为我做的LCD实时展示,刚开始要对LCD初始化
    this->ui->lcdNumber->display("00:00:00:000");
    再在Mainwindow构造函数中写一个Qtimer的对象,让LCD每毫秒更新一下时间。
  • 更改一下按键上的bug:比如按下停止时不能暂停。
  • 将打点的数据展示到textbrowser只需要appendText()(追加)。
  • 停止时应该有一个清除键将所有打点记录清空并将LCD置零
  • 暂停时暂停时间应该被剔除出去
0