这一次我真的不知道该如何表达我的问题。
我的应用程序有一个QDialog作为主窗口。应用程序从远程机器获取不同的值,如温度、湿度等。
为了进行开发,我添加了一个具有不同小部件的组框来模拟这些值。我对向用户抛出警告和警报有不同的限制。
例如,如果温度上升超过30°C,那么我打开一个包含请求时间(应用程序在远程机器上进行轮询)和当前温度的QMessageBox。所以这在每个请求周期都会更新。
我使用show()方法打开消息框,它使我的应用程序在后台运行。现在的问题是:焦点在消息框上,在消息框未被接受/完成之前,我的主窗口/ QDialog中的任何内容都无法单击。
这就是我的问题:在模拟模式下,我想要处理不同的温度值,我可以通过主窗口中的滑块进行调整。我如何访问这些小部件/使消息框以某种方式“不阻塞”?
诚挚的问候,
马蒂亚斯
发布于 2011-06-17 17:14:35
你正在体验的是一个窗口的“模态”。默认情况下,QMessageBox是“应用程序模式”。这意味着对所有其他应用程序窗口的输入被阻塞。
要更改通道,请在调用show()之前使用带有来自Qt::WindowModality的值的setWindowModality()。在您的案例中:
box->setWindowModality(Qt::NonModal);
box->show();发布于 2011-06-17 17:49:58
实际上,你有一个模式消息框,这是QMessageBox的工作方式-即提醒用户,ui受到保护,直到用户注册了消息,关闭消息框并(如果必要)采取了响应消息所需的任何操作。
现在,如果您将消息框形态设置为Qt::NonModal,(请记住将其赋给一个变量,当您的应用程序在弹出消息框后继续运行时,该变量不会超出范围),即使在显示消息框时,您也能够与ui交互,我不得不说这是“不寻常的”。如果我理解你的要求,你应该已经打开了消息框--当这个消息框还在打开的时候,你会想要在主窗口中使用不同的临时值--会有什么效果?直到产生另一个消息对话框?在某个时刻,消息框将不得不被丢弃。
不仅如此,如果您显示一个非模态消息框,然后与主窗口进行交互,那么很可能消息框就会消失在主窗口后面,无论如何都看不见了。
我建议消息框通常被视为预期的、临时的、临时的模式警告框,也许您需要在主窗口中有一个清晰可见的实时报告/状态区域,而不是使用非模式的QMessageBox。
希望这能有所帮助
问候
罗杰
https://stackoverflow.com/questions/6383464
复制相似问题