QT下lcdNumber实现倒计时源代码
QT提供了一个有趣的控件,模仿LCD的东东,虽然暂时没有什么应用中需要用到它,不过感觉这个控件模拟显示LCD效果应该不错,于是决定做一个倒计时的小程序(包含暂停、重置、设置时间等功能)。一、关键对象和函数的说明1、管家对象为timer第一,这个对象我们必须首先包含它的库文件,不要忘记。第二,它的start函数的参数控制timer多久后启动。void start(int msec);2、信号发生与连
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的应用有所帮助。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)