QML绑定与Javascript数组访问QObject属性

时间:2016-05-14 16:19:37

标签: qt qml

我的rootModel拥有名为checklist的财产。 checklist是具有bool属性的QObject,需要由Checkbox {}控制。我试图减少复制和粘贴代码。以下是我的自定义复选框MyCheckbox.qml

import QtQuick.Controls 1.0
import QtQuick 2.0    

Checkbox {
    id: myCheckbox
    property string property: ""


    Binding {
        target: myCheckbox
        property: "checked"
        value: rootModel.checklist[property]
    }

    checked: rootModel.checklist[property]
    onCheckedChanged: rootModel.checklist[property] = checked
}

MyCheckbox.qml的使用示例:

import QtQuick 2.0

Item {

   Row {  
      MyCheckbox {
           property: "check1" //Access to rootModel.checklist.check1
      }

      MyCheckbox {
           property: "check2" //Access to rootModel.checklist.check2
      }
   }
} 

Binding{}

会出现以下错误
QQmlExpression: Expression file:///myChecklistCheckbox.qml:14:16 depends on non-NOTIFYable properties:
      QQmlBind::property

如何修复此错误并让QmlEngine正确绑定属性。 checklist包含每个属性的信号,如果执行以下操作,则NOTIFY可正常工作:

    Binding {
        target: myCheckbox
        property: "checked"
        value: rootModel.checklist.check1
    }

1 个答案:

答案 0 :(得分:2)

正如this page所示,您可以这样做:

CheckBox {
    id: myCheckbox
    property string property: ""

    checked:  rootModel.checklist[property]
    onCheckedChanged: {rootModel.checklist[property] = checked; rebind();}

    function rebind() {
        checked = Qt.binding(function(){ return rootModel.checklist[property]})
    }
}