Как отключить взаимодействие с пользователем в приложении Qt, когда отображается DialogBox?

У меня есть немодальное окно QDialog, которое всплывает об ошибках / предупреждениях в моем приложении Qt, я хочу заставить пользователя сосредоточиться только на этом диалоговом окне и ничего не нажимать в приложении, пока они не нажмут Ok в диалоговом окне.

Мне нужно, чтобы диалоговое окно оставалось немодальным. Такое решение, как скрытие главного окна или его закрытие, неприемлемо.

На данный момент я использую setModal(true); чтобы решить мою проблему. Но я думаю, что этот метод может помешать выполнению основного приложения.

1

Решение

От документация:

Если вы используете show() а также setModal(true) вместе, чтобы выполнить длинный
операция, вы должны позвонить QApplication::processEvents() периодически
во время обработки, чтобы позволить пользователю взаимодействовать с диалогом.

3

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

Вместо использования QDialog коробка, попробуйте использовать qDebug операторы в вашем коде или файл журнала с помощью qInstallMsgHandler,

Вы также можете показать QTextEdit и публиковать там свои журналы / сообщения об ошибках в режиме реального времени.

http://qt-project.org/doc/qt-4.8/debug.html

http://qt-project.org/doc/qt-4.8/qdebug.html#details

http://qt-project.org/doc/qt-4.8/qtglobal.html#qInstallMsgHandler

http://qt-project.org/doc/qt-4.8/qtextedit.html#details

Если вы по-прежнему действительно хотите отлаживать с помощью окна QDialog для ошибок, в псевдомодальном диалоге, но не в модальном диалоге, вы можете попробовать использовать eventFilters для предотвращения поступления событий мыши и клавиатуры в любое другое окно, но было бы сложно разрешить исключение в конечном итоге только в QDialog, но это выполнимо.

Вы также можете перейти к одному или двум виджетам, которые принимают ввод с помощью мыши и клавиатуры, и игнорировать ввод, если виден QDialogBox. Но оба эти способа показать ошибку, но ограничить ввод, не делая его модальным, действительно являются хакерскими и, вероятно, будут подвержены ошибкам.

0

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