满足特定条件时关闭 QMessageBox
close QMessageBox when certain condition is fulfilled
这是有效的:
#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 次消失,随后 QMainWindow 关闭。
BUT 如果立即满足关闭条件,即不工作,即说
if(num>0)
this->close();
第一次触发定时器时为真,程序停止。为什么???
你必须让QMessageBox完全打开并最大化,然后你只需要关闭它,否则QMessageBox Dialog可能还没有registered/fully加载,关闭功能才能成功。
如果您尝试访问 Dialog closevent 中的任何 Dialog 小部件属性,closevent 也是如此。
这是有效的:
#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 次消失,随后 QMainWindow 关闭。
BUT 如果立即满足关闭条件,即不工作,即说
if(num>0)
this->close();
第一次触发定时器时为真,程序停止。为什么???
你必须让QMessageBox完全打开并最大化,然后你只需要关闭它,否则QMessageBox Dialog可能还没有registered/fully加载,关闭功能才能成功。
如果您尝试访问 Dialog closevent 中的任何 Dialog 小部件属性,closevent 也是如此。