想超时自动关闭一个QMessageBox,没找到好的例子,想了想,只好自己写一个,要完成以下两件事,
(1) 定时干活, checkTimer,每次时间一到就重复做某件事
(2) 超时关闭,不能没完没了。
源码如下,
-
- class QMyQuestion: public QMessageBox{
- public:
- QMyQuestion(QString text, int timeout_ms){
- closeTimer.start(timeout_ms) ;
- QObject::connect(&closeTimer, &QTimer::timeout, this, &QMyQuestion::onCloseTimer);
-
-
- checkTimer.start(33);
- QObject::connect(&checkTimer, &QTimer::timeout, this, &QMyQuestion::onCheckTimer);
-
-
- setIcon(QMessageBox::Question);
- setText(text);
- setStandardButtons( QMessageBox::Yes );
- setDefaultButton(QMessageBox::Yes);
- addButton(QMessageBox::No);
- }
-
- ~QMyQuestion(){
- }
-
- private:
- QTimer checkTimer;
- QTimer closeTimer;
-
- void onCloseTimer(){
- this->close();
- }
-
- void onCheckTimer(){
- static int check =0;
- qDebug() << "timer checked "<< check ++;
- }
- };
怎么使用呢?
- int ret = box.exec();
- if(QMessageBox::StandardButton::Yes == ret){
- qDebug() << "message OK";
- } else {
- qDebug() << "message NOK";
- }
这里,不论怎么设置,超时关闭时貌似都是返回的No,不能返回Yes,设置那个DefaultButton也同用,不知道为什么。
本文结束。