Это работает:близко 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 diappears и subsenquently Функция QMainWindow закрывает.
НО он не работает, если условие закрытия немедленно выполнено, то есть, говоря
if(num>0)
this->close();
, которое истинно, когда таймер запускается в первый раз, программа тормозов. Зачем???
Это также верно, когда окно вашего сообщения становится видимым. «программа тормозит», - что это значит? – vahancho
Это замерзает. Это не зависает, если функция updateText вызывается не реже двух раз (т. Е. Таймер отключается дважды). – newandlost