我将QObject
属性声明为:
Q_PROPERTY( QList< int > keys READ getKeys NOTIFY keysChanged )
在docs中声明:
在QML中透明地支持某些C ++序列类型 JavaScript数组类型。
特别是,QML目前支持:
- 的QList&LT; int&gt;
...
但是,当我使用此属性来驱动Repeater
模型时:
QtObject {
id: d_
property var keys: base.proxy.keys // A binding to the C++ keys property
onKeysChanged: {
...
}
}
Column {
spacing: 4
Repeater {
id: repeater
model: d_.keys
delegate: Rectangle {
height: 24
width: 24
color: "red"
}
}
}
Repeater
模型不产生任何代表。如果我查询d_.keys
的长度,它会显示正确的数量,如果我从C ++更改属性,则会触发d_.onKeyChanged:{}
- 但Repeater
从不构建任何内容。
如果我将QML keys
属性更改为JS数组:
property var keys: [1,2,3]
Repeater
按预期工作。如果我使用C ++属性,但手动将数据转换为JS数组,它也可以按预期工作:
QtObject {
id: d_
property var keys: base.proxy.keys
onKeysChanged: {
var list = [];
for ( var i = 0; i < keys.length; ++i ) {
list.push( keys[i] );
}
repeater.model = list;
}
}
这强烈表明,尽管文档说的是,QList<int>
不等同于JS数组。我做错了什么,或者这是一个错误?
答案 0 :(得分:3)
正如here所述,QVariantList
被转换为JS数组,因此问题可能是内容的类型而不是列表本身。
那就是说,我同意你的意见,文件不够清楚,因为QList
似乎也是一个有效的选择。