2016-05-14 3 views
0

У моего rootModel есть свойство, называемое checklist. checklist - QObject, который имеет bool объектов недвижимости, которым необходимо управлять с помощью Checkbox {}. Я пытаюсь уменьшить код копирования и вставки. Ниже мой пользовательский флажок MyCheckbox.qmlQML Связывание с доступом к массиву Javascript для свойства 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 
} 

Пример использования 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 
    } 

ответ

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]}) 
    } 
} 
Смежные вопросы