Модальный QMessageBox не ведет себя как родные диалоги Windows

Мое приложение имеет диалог, который запрашивает пользователя через QMessageBox хочет ли он отменить все внесенные изменения или хочет продолжить редактирование. Я хочу, чтобы этот диалог был модальным для всего приложения.

Я где-то читал, что это стандартное поведение для QMessageBoxтак что мне не нужно устанавливать это явно с чем-то вроде:

mbox.setWindowModality(Qt::ApplicationModal);

Интересно, почему он ведет себя не так, как другие модальные диалоги в ОС (Windows 7 в моем случае). С одной стороны, он функционирует так, как должен, т. Е. Все другие методы ввода в приложении блокируются до тех пор, пока пользователь не откроет диалоговое окно. Тем не менее, он не «мигает» *, если пользователь нажимает на любое другое окно приложения. Есть ли способ заставить Qt вести себя как родной диалог Windows?

Заранее спасибо!


*Если вы не знаете, что я имею в виду под этим «миганием»: просто откройте блокнот в ОС Windows, введите текст и попробуйте закрыть его. Появляется диалоговое окно, в котором предлагается сохранить, отменить или продолжить редактирование. Теперь щелкните где-нибудь в окне редактора -> граница и заголовок диалогового окна мигнет / мигнет несколько раз.

2

Решение

Проблема возникает, когда окно сообщения не имеет родителя. Это прекрасно работает для меня:

QMessageBox box(this);
box.setStandardButtons(QMessageBox::Close);
box.exec();

Но это не так:

QMessageBox box;
box.setStandardButtons(QMessageBox::Close);
box.exec();

Это имеет смысл … окно сообщения не может мигать, если не знает, что на его родителя нажали.

5

Другие решения

Простое решение, которое приходит мне в голову, и если вы хотите развернуть свое приложение только в Windows, вам следует #include <windows.h> и использовать MessageBoxA API.

Кроме того, это прекрасно работает для меня в Windows и Ubuntu

if (QMessageBox::question(this,"Close?","Close this dialog?",QMessageBox::Yes,QMessageBox::No) == QMessageBox::Yes)
{
this->close();
}
1

По вопросам рекламы [email protected]