Function QML:在ListView中调用的ListElement中定义函数

Function QML:在ListView中调用的ListElement中定义函数,function,listview,qml,Function,Listview,Qml,在QML ListView中,我想在单击鼠标earea时调用一个函数: ListView{ anchors.fill: parent orientation: ListView.Horizontal model: myModel delegate: Rectangle { anchors.fill: parent Text { anchors.centerin: parent

在QML ListView中,我想在单击鼠标earea时调用一个函数:

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()
            }
        }
    }
}
我应该是一个超负荷菜单。在ListModel(myModel)中,我希望能够说明调用doSomething()时会发生什么。我该怎么做?也许是这样

ListModel {
    id: myModel

    ListElement {
        label: "New"
        doSomething: {
            canvas.clear()
        }
    }
}
我不知道。我在网上搜索了一下,但什么也没找到
我正在为此使用ListView/模型,因为我想动态添加和删除菜单项。

感谢您的关注!=)

qrc:///main.qml:49 ListElement:无法对属性值使用脚本

这就是你的代码。因此,不能将模型元素的任何属性设置为脚本

我通过将函数放在模型中,而不是放在模型元素中,成功地解决了这个问题:

ListView{
锚定。填充:父级
方向:ListView.Horizontal
型号:myModel
代表:
长方形{
锚定。填充:父级
颜色:“红色”
正文{
anchors.centerIn:父对象
文本:标签
}
鼠耳{
anchors.centerIn:父对象
宽度:30
高度:parent.height
再次点击:{
myModel.actions[标签]();
}
}
}
}
列表模型{
id:myModel
属性变量操作:{
“新建”:函数(){console.log(“单击!”);}
}
李斯特伦{
标签:“新”
}
}
尽管基于文本的索引操作有点像meh,但您可能应该使它使模型中的每个元素都具有唯一的属性(如索引),并将它们用作
操作的键


(在旁注中,您忘记了鼠标区域的
中心,我想知道为什么您使用30的宽度,而不只是填充父对象)

qrc:///main.qml:49 ListElement:无法对属性值使用脚本

这就是你的代码。因此,不能将模型元素的任何属性设置为脚本

我通过将函数放在模型中,而不是放在模型元素中,成功地解决了这个问题:

ListView{
锚定。填充:父级
方向:ListView.Horizontal
型号:myModel
代表:
长方形{
锚定。填充:父级
颜色:“红色”
正文{
anchors.centerIn:父对象
文本:标签
}
鼠耳{
anchors.centerIn:父对象
宽度:30
高度:parent.height
再次点击:{
myModel.actions[标签]();
}
}
}
}
列表模型{
id:myModel
属性变量操作:{
“新建”:函数(){console.log(“单击!”);}
}
李斯特伦{
标签:“新”
}
}
尽管基于文本的索引操作有点像meh,但您可能应该使它使模型中的每个元素都具有唯一的属性(如索引),并将它们用作
操作的键


(另一方面,您忘记了鼠标区域的
中心,我想知道为什么您使用30的宽度而不是填充父区域)

您的目标是什么?触发模型的修改w.r.t.
doSomething()
的结果或从
doSomething()
修改模型?我根本不想修改模型。这应该是一个溢出菜单。当您单击每个条目时,它都应该执行某些操作。让我来编辑主帖子。你的目标到底是什么?触发模型的修改w.r.t.
doSomething()
的结果或从
doSomething()
修改模型?我根本不想修改模型。这应该是一个溢出菜单。当您单击每个条目时,它都应该执行某些操作。让我来编辑主帖子。很好!我甚至不知道你能做到这一点,非常感谢!我会听从你的建议,使用索引。为了回答您的小问题,这不是我的实际代码,我只是想出了一些更简单的代码;)我在QML中使用的是枚举或字符串,但使用的是“id”字符串(类似于变量的名称),例如“key:“new”。如果列表中元素的顺序发生更改,索引可能会变得烦人。如果在使用过程中未删除/重新排列“菜单项”,则可以使用默认情况下在代理中提供的
index
角色(请参阅)。因此,无需添加其他指标<代码>索引
可直接用于
矩形
鼠标区域
。但是,正如@coyotte508所述,如果结构发生变化,这将很快变得令人讨厌。@coyotte508 enums!当然谢谢你指出这一点。当然你应该使用枚举,而不是索引,我的错。由于“权限”或“角色”的更改,订单不仅会更改,而且长度也会更改。再次感谢大家的努力(很好!我甚至不知道你能做到这一点,非常感谢!我会听从你的建议,使用索引。为了回答您的小问题,这不是我的实际代码,我只是想出了一些更简单的代码;)我在QML中使用的是枚举或字符串,但使用的是“id”字符串(类似于变量的名称),例如“key:“new”。如果列表中元素的顺序发生更改,索引可能会变得烦人。如果在使用过程中未删除/重新排列“菜单项”,则可以使用默认情况下在代理中提供的
index
角色(请参阅)。因此,无需添加其他指标<代码>索引
可直接用于
矩形
鼠标区域
。但是,正如@coyotte508所述,如果结构发生变化,这将很快变得令人讨厌。@coyotte508 enums!当然谢谢你指出这一点。当然你应该使用枚举,而不是索引,我的错。由于“权限”或“角色”的更改,订单不仅会更改,而且长度也会更改。再次感谢大家的努力=)