QStateMachine 定时(通过 QState entered() 信号显示非阻塞对话框)
QStateMachine timing (showing a non-blocking dialog via QState entered() signal)
在QStateMachine中输入QState时,使用assignProperty()设置了一些Widget对象属性,并且entered()信号用于运行exec()的QDialog的Slot方法。
这主要有效,但对话框是在分配属性之前创建的,这是不需要的,因为属性仅在对话框关闭后最终分配。
如果对话框不会阻塞,确切的顺序并不重要(它究竟"阻止"了什么?人类感知的外观应该是"同时的"。
解决方案将使对话框不阻塞,或确保在执行对话框之前设置属性。
我现在将尝试使用单次 QTimer 来延迟运行 QDialog exec() 的插槽,但当然,即使这应该有效,我仍然在寻找合适的解决方案。
目前,惯用的解决方案是有两种状态:第一个用于设置属性,第二个用于显示小部件:
QStateMachine machine;
auto * s1 = QState(&machine);
auto * s2 = QState(&machine);
machine.setInitialState(s1);
s1->assignProperty(widget, "property", value);
...
s1->addTransition(s2);
connect(s2, SIGNAL(entered()), widget, SLOT(exec()));
//or
s2->assignProperty(widget, "visible", true);
machine.start();
请注意,QDialog::exec()
是一个插槽,因此您不需要自定义插槽来exec()
对话框。将插槽连接到对话框的accepted()
或finished(int)
信号以获得结果。
相关文章:
- 表单显示对话框函数错误,并且不执行下面的语句
- 在主窗口之前显示登录对话框并隐藏主窗口按钮
- 如何在主窗口标签的对话框中显示QLineEdit的输入
- 在网格视图中显示数据 - 基于 MFC c++ 对话框的应用程序
- C++无法在对话框 CFormView 中显示 ActiveX 控件,则控件变量为 NULL
- C# - 显示对话框将所有者设置为非托管窗口
- 为什么 QPrintDialog 在 Cinnamon 桌面上不显示本机打印对话框
- QT如何显示,请等待对话框,而插座正在等待响应
- 异步显示 Qt 对话框
- winrt消息对话框未显示
- 如何显示视频捕获过滤器对话框(亮度,曝光等相机设置)
- QTest未显示对话框
- 标准输出输出不会显示在基于 Windows MFC 对话框的应用的控制台上
- 嗨,我正在尝试编码一个允许用户在Visual C 中登录的按钮,程序正在运行,但表单对话框未显示
- 如何使 UI 对象仅在单击按钮后显示在对话框中
- 按下热键时显示一个对话框实例
- 如何在对话框编辑框中显示来自 UI 线程类 Run() 函数的字符串
- 有没有办法选择通过标准的OPENFILE对话框向用户显示哪些文件
- 当我打开一个新对话框时,如何禁止在Qt编程的Windows任务栏中显示对话框
- 使用 mfc 对话框显示.bmp图像时出错