如何在循环中初始化 qml 属性列表?
Posted
技术标签:
【中文标题】如何在循环中初始化 qml 属性列表?【英文标题】:How to initialize qml property list in a loop? 【发布时间】:2015-10-31 08:57:15 【问题描述】:我有 qml list 属性:
Item
property list<SomeItem> items: [
SomeItem num: 0 ,
SomeItem num: 1 ,
SomeItem num: 2 ,
...
SomeItem num: 100
]
是否有可能以更聪明的方式初始化它?例如。以某种方式类似于下面的代码?
Item
property list<SomeItem> items
...
Component.onCompleted:
for(var i = 0; i < 100; i++)
??? // items.append( SomeItem num: i)
编辑:对不起 id,我实际上想更改用于初始化其他属性的自定义属性 (num):
SomeItem
property int num: 0
key: getKey(num)
name: getName(num)
function getKey(num)
return ...
function getName(num)
return ...
EDIT 2(根据 Mitch 和 ddriver 的回答):
我想使用Repeater
,但是我必须初始化一些外部库提供的列表属性。
我一直在用num
属性初始化SomeItem
,因为key
属性必须是唯一的并且不能为空。但是,假设我可以通过在 onCompleted
方法中设置 num
来应对它:
Item
property list<SomeItem> items: [
SomeItem ,
SomeItem ,
SomeItem ,
...
SomeItem
]
...
Component.onCompleted:
for(var i = 0; i < items.length; i++)
items[i].num = i
所以主要问题是我必须添加 SomeItem ,
行 100 次。有没有什么巧妙的方法来动态创建这样的属性列表?
【问题讨论】:
老实说,第一个对我来说很聪明,并且最接近 QML 的底层范式。 @skypjack - 这绝对不聪明,而且绝对是多余的。 好吧,如果他关心id
s,那确实是正确的方法。问题可能在于他不应该关心他们的情况,但从例子中我不能这么说。
@skypjack - 不,这是错误的。在语法和概念上。
随你喜欢,伙计。如果你有办法动态分配id
s,请回答这个问题,我也很好奇,我一定会投赞成票。
【参考方案1】:
没有。
documentation for list
描述了它的使用方式:
可以通过类似于 javascript 数组的方式访问列表值:
使用带有逗号分隔值的 [] 方括号语法分配值 length 属性提供列表中的项目数 使用 [index] 语法访问列表中的值
你最好使用Repeater
:
Repeater
model: 100
delegate: SomeItem
num: index
【讨论】:
【参考方案2】:您尝试做的事情毫无意义。并且是完全多余的。而且不可能。
id
属性不是字符串,也不能是数字。
在您的特定情况下,您需要一个等于列表中每个对象索引的数字 id,除了不可能之外,这也是不必要的。相反,您可以使用items[index]
轻松访问每个对象。
如果由于某种原因你真的需要分配和使用动态标识符,你可以使用一个 JS 对象,它允许你进行字符串键查找而不是整数索引:
Item
property var lookup: new Object
Component
id: test
QtObject
property string name
Component.onCompleted:
lookup["John"] = test.createObject(null, "name" : "JohnDoe" )
lookup["Jane"] = test.createObject(null, "name" : "JaneDoe" )
console.log(lookup["John"].name) // outputs JohnDoe
console.log(lookup["Jane"].name) // outputs JaneDoe
【讨论】:
当且仅当id
s 不是要求时才有效(当然,在查看问题时这是有意义的,但问题中没有说明,它可能是该示例是id
s 很重要的更复杂情况的简化示例)。编辑:问题刚刚更新,所以这是有道理的。以上是关于如何在循环中初始化 qml 属性列表?的主要内容,如果未能解决你的问题,请参考以下文章