我有一个无模式的 QDialog 框,在我的 Qt 应用程序中弹出错误/警告,我想强制用户只关注该对话框,而不是单击应用程序中的任何内容,直到他们单击对话框上的 Ok。
我需要对话框保持无模式。隐藏主窗口或将其覆盖之类的解决方案是不可接受的。
目前我正在使用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 真的很hacky,并且可能容易出错。