QT下lcdNumber实现倒计时源代码
Qt 实现 源代码 倒计时
2023-09-27 14:27:33 时间
QT提供了一个有趣的控件,模仿LCD的东东,虽然暂时没有什么应用中需要用到它,不过感觉这个控件模拟显示LCD效果应该不错,于是决定做一个倒计时的小程序(包含暂停、重置、设置时间等功能)。如果你也想要一款一样的,那就跟着我来吧!
先上效果图:
是不是你想要的呢??看正文!
一、关键对象和函数的说明
1、管家对象为timer
第一,这个对象我们必须首先包含它的库文件,不要忘记。第二,它的start函数的参数控制timer多久后启动。
void start(int msec);
2、信号发生与连接
准备好timer对象后,我们可以让timer发出timeout信号,让信号槽里我们自定义的timeoutRun函数执行起来,如下:
connect(timer, SIGNAL(timeout()), this, SLOT(timeoutRun()));
我们也可以这样调用
connect(timer,&QTimer::timeout,this,&MainWindow::timeoutRun);
二、业务逻辑
具体秒钟分钟和时钟的进位就不啰嗦了,太简单。这里说一说暂停和重置。
1、暂停
暂停必须保存好暂停瞬间的时分秒的数值,重启的时候就从这个数值开始,所以我们设置了一个暂停标志pausef。
2、重置
重置要将时分秒设置为目标时间的数值,但我们按下重置键后前面启动的倒计时还会再跑一轮,导致时分秒别设置为最后一轮的数值,所以我们设置一个重置标志resetf来控制程序不保存重置后的最后一轮数值。
三、代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lcdNumber->setDigitCount(8);
ui->lcdNumber->display(QDate::currentDate().toString("yyyy-MM-dd"));
ui->lcdNumber->setSegmentStyle(QLCDNumber::Filled);
timer = new QTimer(this);
connect(timer,&QTimer::timeout,this,&MainWindow::timeoutRun);
on_btnReset_clicked();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::timeoutRun()
{
if(pausef){
//定时12个小时
for(hour = mhour;hour>=0;hour--)
for( min =mmin;min>=0 ;min--)
for(sec=msec;sec>=0;sec--)
{
ui->lcdNumber->display(QDateTime::currentDateTime().toString(
QString("%1").arg(hour, 2, 10, QChar('0'))+":"+
QString("%1").arg(min, 2, 10, QChar('0'))+":"+
QString("%1").arg(sec, 2, 10, QChar('0'))));
Delay_MSec(1000);
if(min>0 && sec==0)
msec=59;
if(hour>0 && min==0)
mmin=59;
if(!pausef )
{
if(!resetf) //被重置后不记录当前时间位置
{
mhour=hour;
mmin=min;
msec=sec;
}
return;
}
}
timer->stop();
//这里可以调用一个你自定义的函数标志着倒计时结束。
}
}
void MainWindow::Delay_MSec(unsigned int msec)
{
QTime _Timer = QTime::currentTime().addMSecs(msec);
while(QTime::currentTime() < _Timer ){
QCoreApplication::processEvents(QEventLoop::AllEvents,100);
}
}
void MainWindow::on_pushButton_clicked()
{
resetf=0;
pausef=!pausef;
if(pausef)
{
timer->start(10);
ui->pushButton->setText("暂停[&P]");
}
else
{
ui->pushButton->setText("开始[&S]");
timer->stop();
}
}
void MainWindow::on_btnReset_clicked()
{
pausef=0;
resetf=1; //重置标志
timer->stop();
ui->pushButton->setText("开始[&S]");
ui->lcdNumber->display(QDateTime::currentDateTime().toString("00:00:00"));
mhour=ui->timeEdit->time().hour();
msec=ui->timeEdit->time().second();
mmin=ui->timeEdit->time().minute();
}
源代码连接
这个倒计时器稍加修改可以应用于多种场合,希望对初学者理解LCDNumber的应用有所帮助。
相关文章
- Qt之图形(QPainter的基本绘图)
- Qt 实现多线程的串口通信
- 基于qt+halcon实现视觉定位模板匹配【附部分源码】
- 基于halcon实现视觉定位框架(C#做主算法,C#、MFC、Qt二次开发)【附源码】
- c++/qt/opencv实现魔方复原【娱乐】
- d指针在Qt上的应用及实现
- 在Qt中使用sleep(包含为win and *nix下sleep函数的实现及用法)
- Qt实现简易计算器
- 【Qt学习笔记】Qt+VS2010的配置
- QT·ListView 的增删改查实现
- 第15.38节 PyQt(Python+Qt)入门学习:containers容器类部件QDockWidget停靠窗功能详解
- PyQt(Python+Qt)学习随笔:在一个窗口点击按钮弹出另一个窗口的实现方法及注意事项
- 使用PyQt(Python+Qt)+动态编译36行代码实现的计算器
- PyQt(Python+Qt)实现的GUI图形界面应用程序的事件捕获方法大全及对比分析
- QT中实现应用程序的单例化
- Qt使用第三方库
- 37.qt quick- 高仿微信实现局域网聊天V3版本(添加登录界面、UDP校验登录、皮肤更换、3D旋转)
- 41.QT-多线程与界面之间交互总结
- Qt 模拟一个导航定位系统
- qt-QBitmap单色图
- qt for Android实现竖屏显示沉浸式菜单栏
- Qt 实现右下角消息通知队列
- Qt 使用 MPV 开源播放器
- Qt实现客户端与服务器消息发送
- Qt快速入门之一:开始学习Qt 与Qt Creator