带定时关闭、有返回判断的弹出窗口的实现,基于 QMessageBox

这两天在做一个需求,需要弹出窗口,并有倒计时,可以显示倒计时时间,倒计时完毕之后自动关闭窗口,然后返回默认点击是的选项,并且还可以返回窗口中人为点击是或者否的按钮,本来打算自己用ui画一个窗口,但是感觉那样比较麻烦,于是琢磨是否可以使用QMessageBox实现这个功能,网上查阅资料后,让我拼接出了一个还行的方法,直接贴代码:

bool MainWindow::widgetWithClock(QString str, int clock_s, QString btnYes, QString btnNo)
{
    static  QTimer timer;
    if(clock_s!=-1)//-1时不计时
            timer.start(1000);//1s触发一次
    static int cnt=0;
    cnt=clock_s;
    QMessageBox *mm=new QMessageBox(QMessageBox::Information,"提醒",str,QMessageBox::Yes| QMessageBox::No,this);
    mm->setButtonText(QMessageBox::Yes,btnYes);  //方式1
    mm->button(QMessageBox::No)->setText(btnNo);    //方式2
    connect(&timer,&QTimer::timeout,[=]()
    {
        cnt--;
        mm->button(QMessageBox::No)->setText("取消("+QString::number(cnt)+")");    //方式2
        if(cnt==0)
        {
           QAbstractButton *btn= mm->button(QMessageBox::Yes);
           btn->animateClick(1);
            timer.stop();
            //return true;//这里不返回,经mm->exec
        }
    });
    int ret = mm->exec();
    timer.stop();//停止定时器并取消信号槽
    disconnect(&timer,&QTimer::timeout,0,0);
    mm->deleteLater();
    if(ret == QMessageBox::Yes)  return true;
    else                         return false;
}

在这里插入图片描述
这个方法使用阻塞(exec)的方式让选项框卡在前面,在取消按钮上按秒刷新倒计时,倒计时完毕或点击确定,本函数返回true, 在倒计时完毕之前点击取消则函数返回false,满足我这个需求。
顺便问一下:有没有其他现成方法可以实现这个需求,并且让ui好看些?

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值