原文地址:Qt 学习笔记 - 第五章 - Qt 时间编程 - Qt 时钟
Qt 学习笔记全系列传送门:
Qt 学习笔记 - 第五章 - Qt 时间编程 - Qt 时钟
目录
时间显示:使用QLabel,显示时间
开始按钮:开始计时
停止按钮:停止计时
重置按钮:计时归零
打点按钮:记录时刻
显示框:使用QTextBowser,显示记录的时刻
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
#include <QTime>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();// 在本节内容中,本质上是作为一种定时任务
QTimer localTimer;
QTimer timer;
// 真正的时间
QTime localTime;
QTime time;
private slots:
void on_startBt_clicked();void timeout_slot();
void on_resetBt_clicked();
void on_stopBt_clicked();
void on_bitBt_clicked();
private:
Ui::Widget *ui;
// 用于打点计数
int i;
};
#endif // WIDGET_H
初始化
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);// 创建窗口时先对秒表进行一次初始化
this->on_resetBt_clicked();
// 每30毫秒触发信号,用于本地时间的刷新
localTimer.start(30);
// 获取当前时间并展示到页面
connect(&localTimer, &QTimer::timeout, this, [=](){
localTime = QTime::currentTime();
ui->localTime->setText(localTime.toString("hh:mm:ss:zzz"));
});
// 设置监听,监听到定时信号时,调用槽函数,增加秒表的时间
connect(&timer, SIGNAL(timeout()), this, SLOT(timeout_slot()));
}
开始计时与计时过程
void Widget::on_startBt_clicked()
{
// 每30毫秒触发信号timeout()
timer.start(30);
}
void Widget::timeout_slot()
{
//qDebug("test");
// 秒表增加的时间与定时信号的间隔时间相同
time = time.addMSecs(30);
ui->showTime->setText(time.toString("hh:mm:ss:zzz"));
}
停止计时
void Widget::on_stopBt_clicked()
{
// 停止定时任务,即停止秒表
timer.stop();
}
打点
void Widget::on_bitBt_clicked()
{
QString tmp;
tmp.sprintf("%d", ++i);
ui->showBit->append(tmp);
ui->showBit->append(time.toString("hh:mm:ss:zzz"));
}
重置计时
void Widget::on_resetBt_clicked()
{
// 先关闭计时
this->on_stopBt_clicked();// 重置时间为0并显示到页面
time.setHMS(0, 0, 0, 0);
ui->showTime->setText("00:00:00:000");
// 打点的初始化
i = 0;
ui->showBit->clear();
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章