QMessageBox阻止QDialog

时间:2011-06-17 08:52:52

标签: qt focus blocking qdialog qmessagebox

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

我的应用程序使用QDialog作为主窗口。 应用程序从远程机器获得不同的温度,湿度等值。

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

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

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

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

致以最诚挚的问候,

的Matthias

2 个答案:

答案 0 :(得分:8)

您遇到的内容称为窗口的“模态”。默认情况下,QMessageBox是“应用程序模式”。这意味着阻止了对所有其他应用程序窗口的输入。

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

box->setWindowModality(Qt::NonModal);
box->show();

答案 1 :(得分:0)

实际上,您有一个模式消息框,这是QMessageBox的工作方式 - 即用户将被警告并且ui受到保护,以免进一步交互,直到用户注册消息,关闭消息框和(如果必要的)采取任何响应信息所需的行动。

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

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

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

希望这有帮助

此致

罗杰