У меня есть немодальное окно QDialog, которое всплывает об ошибках / предупреждениях в моем приложении Qt, я хочу заставить пользователя сосредоточиться только на этом диалоговом окне и ничего не нажимать в приложении, пока они не нажмут Ok в диалоговом окне.
Мне нужно, чтобы диалоговое окно оставалось немодальным. Такое решение, как скрытие главного окна или его закрытие, неприемлемо.
На данный момент я использую setModal(true);
чтобы решить мою проблему. Но я думаю, что этот метод может помешать выполнению основного приложения.
От документация:
Если вы используете
show()
а такжеsetModal(true)
вместе, чтобы выполнить длинный
операция, вы должны позвонитьQApplication::processEvents()
периодически
во время обработки, чтобы позволить пользователю взаимодействовать с диалогом.
Вместо использования 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. Но оба эти способа показать ошибку, но ограничить ввод, не делая его модальным, действительно являются хакерскими и, вероятно, будут подвержены ошибкам.