我的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
}
答案 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]})
}
}