Я разделил на подклассы QDialog
для реализации функциональности, аналогичной QMessageBox
(мне нужно было это сделать для настройки). Он имеет текстовое сообщение и ОК, кнопки Отмена. Я показываю диалог, используя exec()
, чтобы заблокировать его. Теперь, как мне вернуть значения true/false, когда пользователь нажимает кнопку OK/Cancel?
Я попытался подключить кнопки к setResult()
, а затем вернуть значение результата при нажатии, но
- Нажатие на кнопки не закрывает диалоговое окно
- возвращаемое значение неверно. Ниже приведен код, который я написал. Я думаю, что я ошибаюсь в части exec/result - но я не уверен, как это исправить.
class MyMessageBox : public QDialog {
Q_OBJECT
private slots:
void onOKButtonClicked() { this->setResult(QDialog::Accepted); }
void onCancelButtonClicked() { this->setResult(QDialog::Rejected); }
public:
MyMessageBox(QMessageBox::Icon icon, const QString& title,
const QString& text, bool showCancelButton = true,
QWidget* parent = 0);
virtual void resizeEvent(QResizeEvent* e);
QDialog::DialogCode showYourself()
{
this->setWindowModality(Qt::ApplicationModal);
this->exec();
return static_cast<QDialog::DialogCode>(this->result());
}
};
Пользователь создаст экземпляр класса и вызовет showYourself()
, который, как ожидается, вернет значение, а также закроет (и удалит) диалоговое окно.
Я разместил частичный код. Дайте мне знать, если вам нужно больше, и я опубликую полную версию.