温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-07-06 17:52:06 来源:网络 阅读:2064 作者:Lichtr 栏目:软件技术

计时器

首先上图
[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,msec

int 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置零
  • 暂停时暂停时间应该被剔除出去
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI