计时器
首先上图
界面构建主要是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()函数来维持。但是反复更新带来了巨大的任务量,期待用线程的方式来解决(以后再谈)。
计时器分为精确型和粗糙型,但是无论是哪种计时器都依赖于它的操作系统和硬件性能。如果系统过忙不能保证计时器所有求的准确性,那么无论是哪种计时器都会发生偏差。
窗口的介绍
- LCDnumber:需要强调的是它无法获取显示的文本,如果的确需要文本,可以将它的display()函数连接一个槽函数。可以用来显示Qstring
- textbrowser:富文本编辑框,只读不可编辑。textedit类没有富文本可以编辑
功能的实现
- 点击开始键,它要能开始计时。那么我在Mainwindow的构造函数中建一个Qtime对象,来记录开始键按下瞬间计算机当前时间。当我按下暂停或者停止的时候再建立一个Qtime的对象,两个对象比较差值,差值即为记录的时间。
- 因为我做的LCD实时展示,刚开始要对LCD初始化
this->ui->lcdNumber->display("00:00:00:000");
再在Mainwindow构造函数中写一个Qtimer的对象,让LCD每毫秒更新一下时间。 - 更改一下按键上的bug:比如按下停止时不能暂停。
- 将打点的数据展示到textbrowser只需要appendText()(追加)。
- 停止时应该有一个清除键将所有打点记录清空并将LCD置零
- 暂停时暂停时间应该被剔除出去
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/193126.html