3

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

我的应用程序以 QDialog 作为主窗口。该应用程序正在从远程机器获取不同的值,例如温度、湿度等。

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

例如,如果温度上升超过 30°C,那么我打开一个带有请求时间(应用程序在远程机器上轮询)和当前温度的 QMessageBox。因此,每个请求周期都会更新。

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

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

最好的祝福,

马蒂亚斯

4

2 回答 2

8

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

要更改模态,请在调用之前使用setWindowModality()和Qt::WindowModality中的值show()。在你的情况下:

box->setWindowModality(Qt::NonModal);
box->show();
于 2011-06-17T09:14:35.020 回答
0

实际上,您有一个模态消息框,这是 QMessageBox 旨在工作的方式 - 即要提醒用户并且在用户注册消息,关闭消息框并(如有必要)采取之前保护用户界面免受进一步交互响应消息所需的任何操作。

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

不仅如此,如果您显示一个非模态消息框,然后与主窗口交互,您很可能只是让消息框消失在主窗口后面,无论如何都看不见。

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

希望这可以帮助

问候

罗杰

于 2011-06-17T09:49:58.263 回答