Function QML:在ListView中调用的ListElement中定义函数
在QML ListView中,我想在单击鼠标earea时调用一个函数: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
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!当然谢谢你指出这一点。当然你应该使用枚举,而不是索引,我的错。由于“权限”或“角色”的更改,订单不仅会更改,而且长度也会更改。再次感谢大家的努力=)