Inside a QML ListView, i'd like to call a function when a MouseArea is clicked:
ListView{
    anchors.fill: parent
    orientation: ListView.Horizontal
    model: myModel
    delegate:
    Rectangle {
        anchors.fill: parent
        Text {
            anchors.centerin: parent
            text: label
        }
        MouseArea {
            width: 30
            height: parent.height
            onClicked: {
                doSomething()
            }
        }
    }
}
I's supposed to be an overflow-menu. In the ListModel (myModel) i want to be able to say what happens when doSomething() is called. How do i do that? Maybe like so?
ListModel {
    id: myModel
    ListElement {
        label: "New"
        doSomething: {
            canvas.clear()
        }
    }
}
I have no idea. I searched the web, but i couldn't find anything. 
I'm using a ListView/Model for this because i want to add and remove menu-entries dynamically.
Thanks for your attention! =)
qrc:///main.qml:49 ListElement: cannot use script for property value
That's what you get with your code. So you can't set any property of a model element as a script.
I got away with it by putting the functions in the model, not the model element:
ListView{
    anchors.fill: parent
    orientation: ListView.Horizontal
    model: myModel
    delegate:
    Rectangle {
        anchors.fill: parent
        color: "red"
        Text {
            anchors.centerIn: parent
            text: label
        }
        MouseArea {
            anchors.centerIn: parent
            width: 30
            height: parent.height
            onClicked: {
                myModel.actions[label]();
            }
        }
    }
}
ListModel {
    id: myModel
    property var actions : {
        "New": function(){ console.log("clicked!"); }
    }
    ListElement {
        label: "New"
    }
}
Though indexing actions based on text is kind of meh, you should probably make it so each element in the model has a unique property (like an index) and use those as the keys for the actions dictionnary.
(on a side note, you forgot the centerIn of the mouse area, and I wonder why you use a width of 30 instead of just filling the parent)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With