У меня есть вопрос, который имеет очевидный ответ для некоторых из вас, но я просто не могу понять это.QMessageBox удалить при закрытии
QMessageBox http://qt-project.org/doc/qt-5/qmessagebox.html имеет 2 способа отображается, либо вы exec()
, которые остановить выполнение программы, пока пользователь закрыть окно сообщения, или show()
который просто отобразить окно (возможно, в отдельном потоке или в некотором роде, что позволяет программе продолжить пока поле ждет пользователя).
Как удалить окно после использования show()?
Этот код немедленно закрыть его, появляется окно сообщения для наносекунды, а затем он ушел:
QMessageBox *mb = new QMessageBox(parent);
mb->setWindowTitle(title);
mb->setText(text);
mb->show();
delete mb; // obvious, we delete the mb while it was still waiting for user, no wonder it's gone
этот код делает то же самое
QMessageBox mb(parent);
mb.setWindowTitle(title);
mb.setText(text);
mb.show();
// obvious, as we exit the function mb which was allocated on stack gets deleted
также этот код делает то же самое
QMessageBox *mb = new QMessageBox(parent);
mb->setWindowTitle(title);
mb->setText(text);
mb->show();
mb->deleteLater(); // surprisingly this doesn't help either
Так как я могу правильно использовать show(), не имея необходимости обрабатывать его удаление каким-то сложным способом? Есть ли что-то вроде функции deleteOnClose()
, которая просто скажет, что она удалит себя, как только пользователь закроет ее?