This is working:
#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();
}
I am using this QMessageBox in a QMainWindow in its close event.
void MainWindow::closeEvent(QCloseEvent *event)
{
myWarmUpMessageBox * myBox = new myWarmUpMessageBox(this);
myBox->exec();
event->accept();
}
The QMessageBox pops up, counts to 3 diappears, and subsenquently the QMainWindow closes.
BUT it is not working if the condition for closing is fulfilled immediately, i.e. when saying
if(num>0)
this->close();
which is true when the timer is triggered the first time, the program brakes. Why???
You have to let the QMessageBox to open fully and maximized and then only you need to close it, otherwise the QMessageBox Dialog may not be registered/fully loaded yet, for the close function to be successful.
same goes for closeevent also, if you try to access any Dialog widget properties inside Dialog closeevent.