Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript QList<;int>;不能用作中继器的模型_Javascript_C++_Qt_Qml - Fatal编程技术网

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>被触发-但是转发器永远不会生成任何东西。 如果我将QML
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;
    }
}