【问题标题】:binding two elements from two different qml files绑定来自两个不同 qml 文件的两个元素
【发布时间】: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 连接起来,它位于两个不同的选项卡中,这样如果一个更改了,另一个也会更改。

标签: qt qml pyqt5


【解决方案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,这把我搞砸了。保持良好的工作。谢谢。
猜你喜欢
  • 2018-12-09
  • 2021-12-07
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多