Help with ListModel and setProperty
Solved
QML and Qt Quick
-
When I try to change a property value of an item contained into a ListModel the following code has no effect:
Main.qml
import QtQuick 2.0 Item { anchors.fill: parent ListModel { id: modelCrayon } Component.onCompleted: { for (var i = 0; i < 10; i++) modelCrayon.append( { _tag: i, _source: "resources/crayon-green.png", _selected: false } ) } Column { x: -170 spacing: 0 Repeater { model: modelCrayon delegate: Crayon { tag: _tag source: _source selected: _selected onCrayonSelected: { for (var i = 0; i < modelCrayon.count; i++) { if (i == tag) continue; modelCrayon.setProperty(i, "_selected", false); } } } } } }
Crayon.qml
import QtQuick 2.0 Image { property bool selected property int tag signal crayonSelected() id: crayon smooth: true fillMode: Image.PreserveAspectFit onSelectedChanged: console.debug(tag, selected) MouseArea { anchors.fill: parent onClicked: { selected = !selected if (selected) crayonSelected() } } states: State { name: "selected"; when: selected == true PropertyChanges { target: crayon; x: 30 } } transitions: Transition { from: ""; to: "selected" PropertyAnimation { property: "x"; duration: 500; easing.type: Easing.InOutQuad } } }
Nothing is shown on console, so the "selected" var is never changed. I'm sure there's something obvious I'm missing.
By the way, is there a smarter way to use a ListModel as a OptionBox? I mean I want only ONE item at time must have the selected property == true. Or, in other words, keep tracks of the selected index.