满足某些条件时关闭QMessageBox

时间:2015-01-20 11:55:17

标签: c++ qt qmessagebox

这是有效的:

#ifndef MYWARMUPMESSAGEBOX_H
#define MYWARMUPMESSAGEBOX_H

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

class myWarmUpMessageBox : public QMessageBox
{
    Q_OBJECT

private:

   QString _text;
   int _timeoutSeconds;
   QTimer _timer;
   int num = 0;

public:
explicit myWarmUpMessageBox(QWidget * parent):
   QMessageBox(parent)
   {
       connect(&_timer, SIGNAL(timeout()), this, SLOT(updateText()));
       _timer.start(500);
   }

   virtual void showEvent(QShowEvent * e)
   {
       QMessageBox::showEvent(e);
       updateText();
   }

public slots:

void updateText()
{
    num+=1;
    setText(QString::number(num));

    if(num>3)
        this->close();
}

我在关闭事件中在QMainWindow中使用此QMessageBox。

void MainWindow::closeEvent(QCloseEvent *event)
{
    myWarmUpMessageBox * myBox = new myWarmUpMessageBox(this);
    myBox->exec();
    event->accept();
}

弹出QMessageBox,计数到3个diappears,然后QMainWindow关闭。

但是如果立即满足结束条件,即在说

时它无法正常工作
if(num>0)
    this->close();

当第一次触发定时器时,程序会刹车。为什么???

1 个答案:

答案 0 :(得分:0)

您必须让QMessageBox完全打开并最大化,然后才需要关闭它,否则QMessageBox对话框可能尚未注册/完全加载,以使close函数成功。

如果你尝试访问Dialog closeevent中的任何Dialog小部件属性,那么对于closeevent也是如此。