закройте 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();
}

Я использую этот QMessageBox в QMainWindow в его событии закрытия.

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

QMessageBox выскакивает, считает до 3 значений, и затем QMainWindow закрывается.

НО это не работает, если условие для закрытия выполняется немедленно, то есть когда говорится

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

что верно, когда таймер срабатывает в первый раз, программа тормозит. Зачем???

0

Решение

Вы должны позволить QMessageBox открыться полностью и развернуто, и только тогда вам нужно закрыть его, в противном случае диалог QMessageBox может еще не быть зарегистрирован / полностью загружен, чтобы функция закрытия была успешной.

То же самое касается и closeevent, если вы попытаетесь получить доступ к любым свойствам виджета Dialog внутри Dialog closeevent.

0

Другие решения


По вопросам рекламы [email protected]