Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 通过Javascript数组访问QObject属性的QML绑定_Qt_Qml - Fatal编程技术网

Qt 通过Javascript数组访问QObject属性的QML绑定

Qt 通过Javascript数组访问QObject属性的QML绑定,qt,qml,Qt,Qml,我的rootModel具有名为checklist的属性检查表是具有bool属性的QObject,需要由复选框{}控制。我试图减少复制和粘贴代码。下面是我的自定义复选框MyCheckbox.qml import QtQuick.Controls 1.0 import QtQuick 2.0 Checkbox { id: myCheckbox property string property: "" Binding { target: myChe

我的
rootModel
具有名为
checklist
的属性<代码>检查表是具有
bool
属性的QObject,需要由
复选框{}
控制。我试图减少复制和粘贴代码。下面是我的自定义复选框
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
      }
   }
} 
它为
绑定{}
获取以下错误:

QQmlExpression: Expression file:///myChecklistCheckbox.qml:14:16 depends on non-NOTIFYable properties:
      QQmlBind::property
如何修复此错误并使QmlEngine正确绑定属性<代码>检查表对每个属性都有信号,如果执行以下操作,
通知
工作正常:

    Binding {
        target: myCheckbox
        property: "checked"
        value: rootModel.checklist.check1
    }
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]})
    }
}
如中所示,您可以执行以下操作:

    Binding {
        target: myCheckbox
        property: "checked"
        value: rootModel.checklist.check1
    }
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]})
    }
}
如中所示,您可以执行以下操作:

    Binding {
        target: myCheckbox
        property: "checked"
        value: rootModel.checklist.check1
    }
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]})
    }
}