绑定来自两个不同 qml 文件的两个元素

Posted

技术标签:

【中文标题】绑定来自两个不同 qml 文件的两个元素【英文标题】:binding two elements from two different qml files 【发布时间】:2017-06-15 17:34:21 【问题描述】:

我正在尝试绑定两个 dial 元素,这样如果 dial1 值发生更改,相同的值将反映在另一个 qml 中的 dial2 中。

QML 对我来说是新事物,我对这方面了解不多。但我想在这方面使用纯 QML,而不是 C、C++。

//file1.qml

dial
id: dial1




//file2.qml

dial
 id: dial2
 

其次,我希望有两种方式绑定以发生相同的场景。

【问题讨论】:

没有这样的概念——不同的文件。 QML 应用程序是 QML 对象的树。所以如果你有一些 qml 文件并不意味着树中的这个对象。它只是一个原型,所以你应该首先创建这个对象的实例。向我们展示您的 2 个对象以及它们之间的关系。 我不知道你到底想完成什么,但你可以在同一个文件中创建两个组件(比如说 main.qml)。然后您可以将它们的属性绑定到在 main.qml 中创建的相同属性。任何修改都将反映在两个组件上。 @folibis 我有//CustomDial.qml,然后我将这个组件CustomDial 用作不同TAB 页面的两个地方的对象。我有每个选项卡的每个单独的 qml 文件。现在我想将这两个CustomDial Object 连接起来,它位于两个不同的选项卡中,这样如果一个更改了,另一个也会更改。 【参考方案1】:

在某个地方,您将实例化这两个文件。假设它是TabView。这是您将通过向TabView 添加一个将保存共享值的属性来在两个文件之间建立连接的点。 拥有sharedValue 的优点是,两个文件被实例化的时间可能不同,所以如果你销毁file1 的实例并在几分钟后创建file2 的实例,你可以还是有价值的。

TabView 
    property int sharedValue
    File1 
        id: file1
    
    File2 
        id: file2
    

然后您阅读this on bidirectional bindings 并将表盘的两个公开值绑定到共享值。您也可以省略 sharedValue 属性并直接在两个公开值之间安装双向绑定。

当然,你需要公开表盘的值,所以你的文件需要查看

Tab 
    property alias dialValue: dial.value // now you can access the dial's value via this new property.
    CustomDial 
        id: dial
    

只要不更改绑定中的值,我建议使用两个Binding-Object 来安装双向绑定。

【讨论】:

您的解释帮助我了解了这种双向绑定概念。我实际上忘记了我有 TabView,这把我搞砸了。保持良好的工作。谢谢。

以上是关于绑定来自两个不同 qml 文件的两个元素的主要内容,如果未能解决你的问题,请参考以下文章

QML ListView:检测到属性“高度”的绑定循环

如何在 DataTemplate 中绑定两个不同的类属性

QML 绑定到数组元素

QML:在没有双重分配的情况下检测到绑定循环

绑定来自不同 APK 的服务

将 qml 中的值动态绑定到转发器创建的对象