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]})
}
}