将变量赋值给属性并在QML中修改实际对象

Assign a variable to a property and modify the real object in QML

本文关键字:修改 对象 QML 赋值 变量 属性      更新时间:2023-10-16

我创建了一个相当复杂的UI结构。类型bool在这里只是一个例子

Complicated
{
    property bool object
    function modify() { object = true }
    // complicated and long stuff here
}

我把它像这样放到UI中(myvar是某个布尔变量,比如,从c++和myvar == false中暴露出来)

Column
{
    // some UI elements
    Complicated { id: comp; object: myvar }
    // more UI elements
}
  1. 什么都没发生,所以还是myvar == false
  2. comp.modify()称为
  3. 现在comp.object == true但是myvar == false

我该怎么做才能使comp.modify()修改myvar ?在c++中,我会使用指针,但在QML/JS中没有指针?我用Qt5

谢谢!

开箱即用的双向绑定仍然是一个未解决的问题:

需要双向绑定支持来替代别名

请参阅该报告的副本:

允许在QML中创建双向绑定

你可以在Jira上找到一个"变通方法",但它不是最优的。基本上,有两种解决方法:

  • 别名,但它是"硬"的,而不是"软"的,这意味着它不能被分解。

  • 双向绑定组件的使用,但它破坏了一个可重用的组件,并且来回创建两个组件也很烦人。

在您的特定情况下,可能后者适用,因为myvar不完全是别名。试一下:

Binding {
    target: myCppClass
    property: "myvar" value: comp.object
    when: comp.completed
}