Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QMessageBox块QDialog_Qt_Focus_Blocking_Qdialog_Qmessagebox - Fatal编程技术网

Qt QMessageBox块QDialog

Qt QMessageBox块QDialog,qt,focus,blocking,qdialog,qmessagebox,Qt,Focus,Blocking,Qdialog,Qmessagebox,这次我真的不知道如何表达我的问题 我有一个QDialog作为主窗口的应用程序。 应用程序从远程机器获取不同的值,如温度、湿度等 为了开发,我添加了一个带有不同小部件的组框来模拟这些值。我对向用户发出警告和警报有不同的限制 例如,如果温度上升超过30°C,则我打开一个QMessageBox,其中包含请求时间(应用程序在远程机器上进行轮询)和当前温度。因此,它会在每个请求周期更新 我使用show()方法打开消息框,它使我的应用程序在后台运行。现在的问题是:焦点在消息框上,在消息框未被接受/完成之前,

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

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

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

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

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

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

致以最良好的祝愿


Matthias

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

要更改模式,请在调用
show()
之前与值一起使用。就你而言:

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

实际上,您有一个模式消息框,这是QMessageBox的工作方式,即在用户注册消息、关闭消息框以及(如有必要)采取响应消息所需的任何操作之前,将向用户发出警报,并保护ui不受进一步交互的影响

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

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

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

希望这有帮助

问候


罗杰

你好,罗杰!谢谢你的回复。你是对的。这绝对是“不寻常的”。我只想访问UI的模拟原因:这意味着不读取温度/湿度/。。。从远程机器,但从滑块,这反过来我想访问它。尽管如此,UI(my QDialog)不允许太多交互-它只显示不同的值/仅显示输出。正如我所说,输入仅用于模拟目的。