Qt阻止调用显示对话框?

时间:2011-03-01 23:37:36

标签: c++ qt blocking qml

我正在讨论Qt和QML。

所以我希望有一个阻塞调用来显示一个对话框并检索用户输入。保证调用不在当前UI线程上。

我有使用QML创建的QDeclarativeView对象。我可以使用show method()显示它。但现在我想阻止,直到用户点击确定/取消,此时我将从对象中提取信息并将信息返回给调用者。

所以问题是:

  • 这是使用QT的合理方式吗
  • 如果是这样,我如何制作当前的线程块?

2 个答案:

答案 0 :(得分:3)

使用连接到QDialog :: exec()插槽的Qt :: BlockingQueuedConnection。

http://doc.qt.io/qt-5/qt.html#ConnectionType-enum

答案 1 :(得分:1)

如果从QDialog开始,可以使用exec()方法阻止,直到对话框被解除。您可以将声明性视图放在对话框中。

如果这是合理使用Qt,则取决于您的需求。在许多情况下,用户会更喜欢非模态对话框,他们可以在打开对话框的情况下继续做其他事情。阻塞函数通常不是呈现这种非模态窗口的最方便的方式。通常,“正确”的做法是将信号连接到处理程序,该处理程序在您的对话框被解除时执行。