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

时间:2013-02-11 18:31:32

标签: c++ qt dialog modeless

我有一个无模式QDialog框,在我的Qt应用程序中弹出错误/警告,我想强制用户只关注该对话框而不是单击应用程序中的任何内容,直到他们在对话框中单击Ok。 / p>

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

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

2 个答案:

答案 0 :(得分:3)

来自documentation

  

如果您同时使用show()setModal(true)来执行漫长的操作   操作时,您必须定期致电QApplication::processEvents()   在处理过程中使用户能够与对话框进行交互。

答案 1 :(得分: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可见则忽略输入。但是这两种显示错误的方式,但限制输入而不使其成为模态实际上是非常hacky,并且可能容易出错。