这次我真的不知道该如何提出问题...

我的应用程序带有一个QDialog作为主窗口。 该应用程序从远程计算机获取不同的值,例如温度,湿度等。

为了进行开发,我添加了带有不同小部件的组框来模拟这些值。对于向用户发出警告和警报,我有不同的限制。

例如,如果温度上升超过30°C,则我将打开一个QMessageBox,其中包含请求时间(应用程序在远程计算机上进行轮询)和当前温度。因此,每个请求周期都会对此进行更新。

我使用show()方法调出消息框,使我的应用程序在后台运行。现在的问题是:焦点位于消息框上,而在我的主窗口/ QDialog中没有任何内容可以单击,直到该消息框不被接受/完成为止。

那是我的问题:在模拟模式下,我想在不同的温度值下玩耍,可以通过主窗口中的滑块进行调整。如何访问这些小部件/使消息框以某种方式“不阻塞”?

最诚挚的问候,

Matthias

有帮助吗?

解决方案

您所经历的被称为窗口的“模态”。默认情况下,QMessageBox是“应用程序模式”。这意味着所有其他应用程序窗口的输入均被阻止。

要更改模式,请使用 setWindowModality()和一个值从 Qt :: WindowModality 调用show()之前。就您而言: 通用标签

其他提示

实际上,您有一个模态消息框,它是QMessageBox的工作方式-即,将向用户发出警报,并保护ui免受进一步的交互,直到用户注册了该消息,关闭该消息框和(如果必要)针对该消息采取了所需的任何操作。

现在,如果将消息框模态设置为Qt :: NonModal,(请记住将其分配给在弹出消息框后应用程序继续运行时不会超出范围的变量),您将可以进行交互即使在显示消息框时也使用ui。我不得不说这是“不寻常的”。如果我了解您的要求,您将已经打开了消息框-仍在显示该消息框,然后您将要在主窗口中使用不同的温度值-会产生什么效果?直到出现另一个消息对话框?该消息框将不得不在某个时候被丢弃。

不仅如此,如果您显示一个非模态消息框然后与主窗口进行交互,则很有可能只是使该消息框消失在主窗口后面,而且还是看不见。

我建议通常将消息框视为预期的消息-仅临时的,临时的模式警报框,也许您需要在主窗口中清晰可见的实时报告/状态区域,而不要使用非模式的QMessageBox。

希望这会有所帮助

致谢

罗杰

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top