Qt|QTimer动态倒计时显示距离下一次任务执行剩余的时间

   用到了定时器QTimer,这里定的间隔是1s,我用lcdnumber以s为单位,动态显示了距离下一次触发timeout()信号还有多长时间。

主要思路:

  1. 多久执行一次任务,是用户输入的间隔intval
  2. 用当前时间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;

}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用QSettings类来保存应用程序的配置信息,以判断应用程序是否是第一次打开。如果是第一次打开,则启动8秒计时器并判断超时。如果不是第一次打开,则在按键按下时启动计时器。 以下是一个示例代码: ``` #include <QCoreApplication> #include <QTimer> #include <QDebug> #include <QSettings> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //读取应用程序的配置信息 QSettings settings("MyCompany", "MyApp"); bool isFirstRun = settings.value("isFirstRun", true).toBool(); if(isFirstRun) { qDebug() << "First run, starting 8s timer..."; QTimer timer; timer.setSingleShot(true); //设置为单次触发 timer.setInterval(8000); //设置8秒超时 QObject::connect(&timer, &QTimer::timeout, []{ qDebug() << "Timer timeout!"; QSettings settings("MyCompany", "MyApp"); settings.setValue("isFirstRun", false); //设置不是第一次运行 qApp->quit(); //计时器超时后退出应用程序 }); timer.start(); //启动计时器 } else { qDebug() << "Not first run, waiting for button press..."; // TODO: 在按键按下时启动计时器 } return a.exec(); } ``` 在上述代码中,我们使用QSettings类读取应用程序的配置信息,并根据是否是第一次运行来决定启动8秒计时器还是等待按键按下后启动计时器。在8秒计时器超时后,我们将应用程序的配置信息设置为不是第一次运行,并退出应用程序。 需要注意的是,上述代码中的TODO部分需要您根据具体情况来实现。您需要连接按键的按下信号,并在信号处理函数中启动计时器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值