QT / QML:性病::矢量 处理

问题描述 投票:0回答:1

编辑:问题是,只有5.6,其中有一组简化根据https://doc.qt.io/qt-5.6/qtqml-cppintegration-data.html VS最新版本支持的“原生”类型的...

根据这一页:qazxsw POI,如果与https://doc.qt.io/qt-5/qtqml-cppintegration-data.html注册和暴露/作为一个属性访问qazxsw POI是通过QML支持。但是,我不能得到这个工作。

我的类(可通过QML被实例化,所以这个级别的作品)的声明,如:

std::vector<int>

通过注册

qRegisterMetaType()

当我把东西放到载体和尝试访问myVector.length或myVector.size,则返回“未定义”(尺寸()是不可调用的)。如何遍历元素?以上链接的网页说:“某些C ++序列类型在QML透明支持的行为类似于JavaScript的数组类型”(在列表中提到// prop decl Q_PROPERTY(std::vector<int> myVector READ myVector NOTIFY myVectorChanged) // read accessor Q_INVOKABLE std::vector<int> recordTime() const; // signal (in signal section) void myVectorChanged(); ),所以我预计qRegisterMetaType<std::vector<int> >("std::vector<int>"); 和索引访问工作。

qt qml qobject
1个回答
1
投票

文档说此容器将被自动转换为JS阵列。你并不需要注册任何东西。

当然,转换将是一个副本,因此修改它不会修改原始数组,而你使用的方法是使用一个普通JS数组的方式相同。这肯定应该有一个std::vector<int>(不length)通过length财产和支持索引访问。

更新:

你的失败故事后,我决定到实际运行一个简单的测试:

length()

正如你所看到的,它给人的预期输出,无需任何注册任何东西。

IIRC有使用Qt的问题,即由于某种原因造成的,当您使用[]接口的自动转换不一命呜呼我想,这个问题仍然是有效的,该解决方案谢天谢地是简单地不使用属性,但一个简单的返回值。

如果您的问题仍然存在,我建议仔细检查你的代码,或者如果有必要,清洁和重建项目,因为转换肯定是从属性相关的问题制定出符合市场预期,备用。

© www.soinside.com 2019 - 2024. All rights reserved.