从QML模态对话框中检索值的最佳方法

时间:2011-05-02 21:04:47

标签: c++ qt qt-quick

在我的QT C ++应用程序中,我使用2个按钮(OK / CANCEL)调用QML ModalDialog,它在屏幕上正确显示,因此没有问题。

但是我很难找到一种方法来检索我的QT C ++应用程序中按下了哪个按钮。

当我调用QML ModalDialog时,我无法以某种方式“冻结”,等待用户按下OK按钮或取消按钮 我看到的是应用程序调用QML ModalDialog,并立即退出该部分并继续。

QMetaObject :: invokeMethod可以调用QML函数并具有返回值,但它不等待用户按下其中一个按钮,它只是立即退出,所以没有用。

我想在我的应用程序的几个地方使用这个QML ModalDialog(QML模式 对话框可以有我的QT C ++应用程序传递的不同文本),所以我正在寻找一个通用的解决方案。

基本上和通用的说法我正在寻找这样的东西:

C / C ++ return_value = QML_Modal_Dialog(....)

有人能指出我正确的方向吗?感谢

2 个答案:

答案 0 :(得分:1)

QML模态对话框附带两个“已接受”和“已取消”的信号。如果您在代码中为这两个信号提供处理程序,您将能够知道按下了哪个按钮。 您可以参考以下内容作为参考。

Modal Dialog Ref 1

Modal Dialog Ref 2

希望这有帮助!

答案 1 :(得分:0)

尽管问题太旧了,但我的回答可能对其他人有帮助。

我在QML中遇到了与Dialogs相同的问题。你以命令的方式思考它,而QML是一种声明性语言,它不允许你停止程序流并等待用户的选择。 正如Purnima建议您应该使用信号处理程序(您可以找到Qt 5.6 here)的列表。将一些应用程序的逻辑移动到信号 处理程序。

例如 - 如果您的函数a()是根据用户在对话框中的选择执行的,则应在其信号处理程序(例如onAcceptedonRejected)中的对话框内调用它两种不同的参数,基于信号处理程序的类型。把它想象成将流分成两个流。