【问题标题】:Best approach to retrieve values from a QML Modal dialog从 QML 模态对话框中检索值的最佳方法
【发布时间】:2016-04-20 17:26:37
【问题描述】:

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

但是我正在努力寻找一种方法来在我的 QT C++ 应用程序中检索按下了哪个按钮。

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

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

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

一般来说,我正在寻找这样的东西:

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

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

【问题讨论】:

    标签: c++ qt qt-quick


    【解决方案1】:

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

    Modal Dialog Ref 1

    Modal Dialog Ref 2

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      尽管问题太老了,但也许我的回答会对其他人有所帮助。

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

      例如 - 如果您的函数 a() 是根据用户在对话框中的选择执行的,您应该改为在其信号处理程序(例如 onAcceptedonRejected)中使用两个不同的参数调用它信号处理程序的类型。可以将其视为将流分成两个流。

      【讨论】:

        猜你喜欢
        • 2023-03-06
        • 1970-01-01
        • 2010-11-30
        • 2011-08-18
        • 2018-12-18
        • 2016-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多