如何在显示DialogBox时禁用Qt应用程序中的用户交互?

问题描述:

我有一个无模式的QDialog盒子,弹出错误/警告在我的Qt应用程序,我想强制用户只专注于该对话框,并没有点击应用程序中的任何东西,直到他们点击对话框上的确定。如何在显示DialogBox时禁用Qt应用程序中的用户交互?

我需要对话框保持无模式。隐藏主窗口或覆盖它的解决方案是不可接受的。

目前我正在使用setModal(true);来解决我的问题。但我认为这种方法可能会阻止主应用程序执行。

+1

那么,这就是模式对话框,用于停止用户与其他应用程序的交互。 – 2013-02-11 18:32:57

+0

@JoachimPileborg我有消息到达后台,必须在应用程序到达时执行。 – andre 2013-02-11 18:34:06

+0

我想问题会更清楚,如果我问如何禁用键盘和鼠标输入。 – andre 2013-02-11 18:41:23

documentation

如果使用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可见,则忽略输入。但是,这两种显示错误的方法,但是限制输入而不使其成为Modal是非常冒险的,并且可能会出错。

+0

这不是用于调试应用程序的,它是用户的消息框。 – andre 2013-02-11 19:02:03