我在搞砸 Qt 和 QML。
所以我想要一个阻塞调用来显示一个对话框并检索用户输入。保证调用不在当前 UI 线程上。
我有使用 QML 创建的 QDeclarativeView 对象。我可以使用 show method() 来显示它。但现在我想阻止,直到用户点击 OK/Cancel,此时我将从对象中提取信息并将信息返回给调用者。
所以问题是:
- 这是使用 QT 的合理方式吗
- 如果是这样,我如何使当前线程阻塞?
使用连接到 QDialog::exec() 插槽的 Qt::BlockingQueuedConnection。
如果你从 QDialog 开始,你可以使用 exec() 方法来阻塞直到对话框被关闭。您可以将声明性视图放到对话框中。
至于这是否是 Qt 的合理使用,这取决于您的需求。在许多情况下,用户会更喜欢非模态对话框,他们可以在对话框打开的情况下继续做其他事情。阻塞函数通常不是呈现这种非模态窗口的最方便的方式。通常,“正确”的做法是将信号连接到处理程序,该处理程序在您的对话框被关闭时执行。