QMessageBox具有倒计时定时器 [英] QMessageBox with a countdown timer

查看:1494
本文介绍了QMessageBox具有倒计时定时器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道在 QMessageBox 中添加倒计时器的最佳方法是什么?例如,当显示消息框时,倒计时定时器开始例如5秒。

I wanted to know what would be the best approach of adding a countdown timer to a QMessageBox ? For instance when a message box is displayed the countdown timer starts for say 5 seconds. If the user doesn't respond to the Message box the message box picks up a default choice.

推荐答案

如此类似的事情,如果用户没有回复消息框,消息框会选择一个默认选项。 :

How about something like this:

#include <QMessageBox>
#include <QPushButton>
#include <QTimer>

class TimedMessageBox : public QMessageBox
{
Q_OBJECT

public:       
   TimedMessageBox(int timeoutSeconds, const QString & title, const QString & text, Icon icon, int button0, int button1, int button2, QWidget * parent, WindowFlags flags = (WindowFlags)Dialog|MSWindowsFixedSizeDialogHint) : QMessageBox(title, text, icon, button0, button1, button2, parent, flags), _timeoutSeconds(timeoutSeconds+1), _text(text)
   {
      connect(&_timer, SIGNAL(timeout()), this, SLOT(Tick()));
      _timer.setInterval(1000);
   }

   virtual void showEvent(QShowEvent * e)
   {
      QMessageBox::showEvent(e);
      Tick();
      _timer.start();
   }

private slots:
   void Tick()
   {
      if (--_timeoutSeconds >= 0) setText(_text.arg(_timeoutSeconds));
      else
      {
         _timer.stop();
         defaultButton()->animateClick();
      }
   }

private:
   QString _text;
   int _timeoutSeconds;
   QTimer _timer;
};

[...]

TimedMessageBox * tmb = new TimedMessageBox(10, tr("Timed Message Box"), tr("%1 seconds to go..."), QMessageBox::Warning, QMessageBox::Ok | QMessageBox::Default, QMessageBox::Cancel, QMessageBox::NoButton, this);
int ret = tmb->exec();
delete tmb;
printf("ret=%i\n", ret);

这篇关于QMessageBox具有倒计时定时器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆