满足特定条件时关闭 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 di,然后 QMainWindow 关闭。

但是,如果立即满足关闭条件,即在说

if(num>0)
    this->close();

当计时器第一次触发时,程序会制动。为什么???

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

关闭事件

也是如此,如果您尝试访问对话框关闭事件中的任何对话框小部件属性。

相关内容

  • 没有找到相关文章

最新更新