用到了定时器QTimer,这里定的间隔是1s,我用lcdnumber以s为单位,动态显示了距离下一次触发timeout()信号还有多长时间。
主要思路:
- 多久执行一次任务,是用户输入的间隔intval
- 用当前时间QTime::currentTime()和baseTime之间的时间差,计算距离下一次任务的剩余时间
主要代码:
//同步时间
void on_btnGet_clicked()
{
this->baseTime=baseTime.currentTime();//基准时间
timer=new QTimer(this);
timer->setInterval(1000);//间隔1s
connect(timer,&QTimer::timeout,this,[=](){
int temp=baseTime.secsTo(QTime::currentTime());//时间差
if(temp>=intVal*60)//用户输入的间隔,我设置的单位是分钟,所以乘以60换算成s
{
on_btnGet_clicked();
baseTime.restart();
}
else
{
ui->lcdNumber->display(secsToTime(intVal*60-temp));//显示剩下的时间。
}
});
timer->start();
}
将s转换成时间
QString secsToTime(int s)
{
int h=0,m=0;
h=s/3600;
s%=3600;
m=s/60;
s%=60;
QString str=QString::number(h)+"时:"+QString::number(m)+"分:"+QString::number(s)+"秒";
qDebug()<<str;
return str;
}