绑定来自两个不同 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 文件的两个元素的主要内容,如果未能解决你的问题,请参考以下文章