首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QMessageBox阻止QDialog

QMessageBox阻止QDialog
EN

Stack Overflow用户
提问于 2011-06-17 16:52:52
回答 2查看 5.1K关注 0票数 3

这一次我真的不知道该如何表达我的问题。

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

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

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

我使用show()方法打开消息框,它使我的应用程序在后台运行。现在的问题是:焦点在消息框上,在消息框未被接受/完成之前,我的主窗口/ QDialog中的任何内容都无法单击。

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

诚挚的问候,

马蒂亚斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-17 17:14:35

你正在体验的是一个窗口的“模态”。默认情况下,QMessageBox是“应用程序模式”。这意味着对所有其他应用程序窗口的输入被阻塞。

要更改通道,请在调用show()之前使用带有来自Qt::WindowModality的值的setWindowModality()。在您的案例中:

代码语言:javascript
运行
复制
box->setWindowModality(Qt::NonModal);
box->show();
票数 8
EN

Stack Overflow用户

发布于 2011-06-17 17:49:58

实际上,你有一个模式消息框,这是QMessageBox的工作方式-即提醒用户,ui受到保护,直到用户注册了消息,关闭消息框并(如果必要)采取了响应消息所需的任何操作。

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

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

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

希望这能有所帮助

问候

罗杰

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6383464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档