【问题标题】:Can not initialize UI with bound object in QML/C++无法在 QML/C++ 中使用绑定对象初始化 UI
【发布时间】:2017-05-11 18:32:47
【问题描述】:

我将来自QtQuick.Controls 2.xRangeSlider 放入组件中。我已将其min.value 绑定到我的模型对象,它是QObject 的子类,并且已暴露于QML 上下文。

我可以使用名称从 QML 访问它:“设置”。该控件应该读取加载程序的onLoaded:{...} 中的设置以进行自身初始化。我在Loader 之外有一个Binding-Object 来写回min.value 的任何更改。 但是控件总是先设置设置的属性,所以我不能用设置的属性来初始化它。

Loader {
    id: loader
    sourceComponent: ctrl
    onLoaded: {
         loader.item.min = settings.min
    } 
}
Binding {
    target: settings
    property: "min"
    value: loader.item.min.value
}
Component {
    id: ctrl
    Item {
        property alias min: slider.first
        RangeSlider {
            id: slider
            ...
        }
    }
}

我想将 settings.min 的值分配给loader.item.min.value(即slider.first.value),但在此分配发生之前,settings.min 更改为slider.first.value。用户设置新值后,我希望将settings.min 设置为slider.first.value

有人知道如何正确实现吗?

【问题讨论】:

  • 我会尝试使用 Loader 的 setSource 方法:object setSource(url source, object properties)

标签: c++ qt qml


【解决方案1】:

您可以使用Binding-Object 的when-属性来停用绑定,直到您设置了初始值。将其初始设置为false,然后在onLoaded-handler 的第一行将其更改为true

delayed-property 也很有趣。我不能保证这会奏效,但它可能是一个优雅的解决方案。我还没试过。

【讨论】:

    猜你喜欢
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 2021-12-19
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多