2016-05-14 94 views
0

我的rootModel擁有名爲checklist的屬性。 checklist是QObject,它具有bool屬性,需要由Checkbox {}控制。我試圖減少複製和粘貼代碼。下面是我的自定義複選框的MyCheckbox.qml使用的MyCheckbox.qml使用Javascript對QObject進行QML綁定訪問QObject屬性

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 
} 

例子:

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 
    } 

回答

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