2013-02-11 6 views
1

У меня есть модельное поле QDialog, которое всплывает на ошибках/предупреждениях в моем приложении Qt, я хочу заставить пользователя сосредоточиться только на этом диалоговом окне и не нажимать ничего в приложении до тех пор, пока в диалоговом окне не будет нажато «ОК».Как отключить взаимодействие пользователя в приложении Qt при отображении DialogBox?

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

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

+1

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

+0

@JoachimPileborg У меня есть сообщения, поступающие в фоновом режиме, которые должны выполняться приложением по мере их поступления. – andre

+0

Я думаю, вопрос будет более ясным, если бы я спросил, как отключить ввод клавиатуры и мыши. – andre

ответ

3

documentation От:

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

0

Вместо использования поля 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

Это не для отладки приложения, это окно для пользователя. – andre