如何在显示DialogBox时禁用Qt应用程序中的用户交互?
我有一个无模式的QDialog盒子,弹出错误/警告在我的Qt应用程序,我想强制用户只专注于该对话框,并没有点击应用程序中的任何东西,直到他们点击对话框上的确定。如何在显示DialogBox时禁用Qt应用程序中的用户交互?
我需要对话框保持无模式。隐藏主窗口或覆盖它的解决方案是不可接受的。
目前我正在使用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可见,则忽略输入。但是,这两种显示错误的方法,但是限制输入而不使其成为Modal是非常冒险的,并且可能会出错。
这不是用于调试应用程序的,它是用户的消息框。 – andre 2013-02-11 19:02:03
那么,这就是模式对话框,用于停止用户与其他应用程序的交互。 – 2013-02-11 18:32:57
@JoachimPileborg我有消息到达后台,必须在应用程序到达时执行。 – andre 2013-02-11 18:34:06
我想问题会更清楚,如果我问如何禁用键盘和鼠标输入。 – andre 2013-02-11 18:41:23