1

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

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

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

4

2 回答 2

3

文档中:

如果使用show()setModal(true)一起执行长操作,则必须QApplication::processEvents()在处理过程中定期调用,以使用户能够与对话框进行交互。

于 2013-02-11T19:09:37.040 回答
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 可见,则忽略输入。但是这两种显示错误的方式,但限制输入而不使其成为 Modal 真的很hacky,并且可能容易出错。

于 2013-02-11T18:59:16.240 回答