Чего я хочу добиться, так это того, что когда я нажимаю кнопку закрытия (X) или стандартные кнопки (ОК|Да|Нет|...) на QMessageBox
, вместо закрытия QMessageBox
я просто хочу скрыть это.
Я переопределяю функцию closeEvent(QCloseEvent *event)
, поэтому, когда я нажимаю кнопку закрытия (X), QMessageBox
просто скрывается. Я провел некоторое исследование в Интернете, чтобы попытаться скрыть QMessageBox
при нажатии кнопки OK
, некоторые люди говорят, что я должен переопределить функцию QDialog::reject()
, но я не заставил ее работать.
Вот минимальный пример того, что я пытаюсь сделать:
MessageBox::MessageBox(QWidget *parent) : QMessageBox(parent)
{
this->setStandardButtons(QMessageBox::Ok);
int ret = this->exec();
switch (ret) {
case QMessageBox::Ok:
//confusing part
break;
default:
break;
}
}
void MessageBox::closeEvent(QCloseEvent *event)
{
event->ignore();
this->hide();
}
void MessageBox::reject()
{
//I am confused about how to do this part to hide the message box when the OK button is clicked.
}
Надеюсь, кто-нибудь может предоставить мне способ сделать это? Спасибо.
Редактировать: почему я хочу это сделать?
У меня есть приложение, которое в основном работает в фоновом режиме, поэтому большую часть времени окна скрыты. Когда я нажимаю действие «Проверить обновления» в меню значков на панели задач, появляется QMesssageBox
, чтобы показать, доступно ли обновление. И затем, если я нажму кнопки на QMessageBox
, приложение просто закроется. Но также я заметил, что если у меня есть активное окно, когда я нажимаю кнопки на QMessageBox
, приложение не закрывается. Поэтому я просто хочу, чтобы мое приложение не закрывалось после нажатия кнопок на QMessageBox
, когда нет других активных окон. Надеюсь, я понятно объясняюсь.
accept()
, а неreject()
. Вы также можете просто создать нестандартные кнопки и вызватьhide()
в соответствующих слотах. Но весь вопрос заставляет меня задаться вопросом: почему вы хотите это сделать? - person Karsten Koop   schedule 08.05.2018