我有一个无模式QDialog框,在我的Qt应用程序中弹出错误/警告,我想强制用户只关注该对话框而不是单击应用程序中的任何内容,直到他们在对话框中单击Ok。 / p>
我需要对话框保持无模式。隐藏主窗口或遮住主窗口的解决方案是不可接受的。
目前我正在使用setModal(true);
来解决我的问题。但我认为这种方法可能会阻止主应用程序执行。
答案 0 :(得分:3)
如果您同时使用
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,并且可能容易出错。