2011-06-17 55 views
2

我真的不知道如何制定我的问题这次...QMessageBox块QDialog

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

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

例如,如果温度超过30°C,然后打开QMessageBox,请求时间(应用程序在远程计算机上进行轮询)和当前温度。所以这是更新每个请求周期。

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

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

最好的问候,

马蒂亚斯

回答

8

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

要更改模态,请在拨打show()之前使用setWindowModality(),其值为Qt::WindowModality。你的情况:

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

完美,非常感谢你! :) – matthias 2011-06-17 09:25:54

0

你的确有一个模式消息框是QMessageBox提示是为了工作的方式 - 即,用户在被提醒和用户界面是从进一步的交互保护,直到用户已注册的消息,关闭消息框,并在必要时采取任何必要的措施来回复消息。

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

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

我建议消息框一般按照预期处理 - 仅为临时模态警报框,也许您需要在主窗口中清晰可见的实时报告/状态区域,而不是使用非模态QMessageBox。

希望这有助于

问候

罗杰

+0

你好罗杰!谢谢您的回复。你是对的。这绝对是'不寻常的'。我只想出于模拟原因访问用户界面:这意味着不从远程机器读取温度/湿度/ ...,而是从滑块获取它,然后我想访问它。尽管如此,用户界面(我的QDialog)不允许太多的交互 - 它只显示不同的值/只输出。正如我所说,输入仅用于模拟目的。 – matthias 2011-06-17 10:15:49