Javascript QList<;int>;不能用作中继器的模型
我有一个Javascript QList<;int>;不能用作中继器的模型,javascript,c++,qt,qml,Javascript,C++,Qt,Qml,我有一个QObject属性声明为: Q_PROPERTY( QList< int > keys READ getKeys NOTIFY keysChanged ) 中继器型号不产生代理。如果查询“代码> dy.KEY< /CUT>的长度,它显示正确的数量,如果我将属性从C++中更改, dy.OnKechange:{} /Cuth>被触发-但是转发器永远不会生成任何东西。 如果我将QMLkeys属性更改为JS数组: property var keys: [1,2,3] 中继器按预期
QObject
属性声明为:
Q_PROPERTY( QList< int > keys READ getKeys NOTIFY keysChanged )
中继器
型号不产生代理。如果查询“代码> dy.KEY< /CUT>的长度,它显示正确的数量,如果我将属性从C++中更改,<代码> dy.OnKechange:{} /Cuth>被触发-但是keys
属性更改为JS数组:
property var keys: [1,2,3]
中继器按预期工作。如果我使用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;
}
}
QtObject{
id:d_
属性变量键:base.proxy.keys
onKeysChanged:{
var列表=[];
对于(变量i=0;i
这强烈表明,不管文档怎么说,QList
并不等同于JS数组。我是做错了什么,还是这是一个bug?如上所述,QVariantList被转换为JS数组,因此问题可能是内容的类型,而不是列表本身
也就是说,我同意您的观点,文档不够清晰,因为QList
似乎也是一个有效的替代方案。我知道这根本不能解决问题,但您是否尝试过使用填充整数的QVariantList
?这实际上是一个很好的观点QList
属性似乎(直接)不适用于Repeater
模型,但JS数组适用。另一种方法是使用base.proxy.keys.length
来控制应该始终有效的模型。我同意你的说法:<代码> qList不等同于JS数组。但是,链接到的文档不是关于模型的,它们只是声明这些C++类型是“支持QML作为JavaScript数组类型透明的”。文档是,并且没有将QList
列为有效的模型。@Mitch啊,说得好,谢谢你做错误报告。但是,您链接到的页面是否也应该指定QVariantList
可以用作QML模型?因为这对我有用但是,与之相关的PoSQL文档不是C++模型,而是说明这些C++类型是“支持QML作为JavaScript数组类型透明的”。文档是,并且没有将QList
列为有效模型。但是,是的,如果是这样的话,文档应该说明它们不适合用作模型。
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;
}
}