编辑:问题是,只有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>");
和索引访问工作。
文档说此容器将被自动转换为JS阵列。你并不需要注册任何东西。
当然,转换将是一个副本,因此修改它不会修改原始数组,而你使用的方法是使用一个普通JS数组的方式相同。这肯定应该有一个std::vector<int>
(不length
)通过length
财产和支持索引访问。
更新:
你的失败故事后,我决定到实际运行一个简单的测试:
length()
正如你所看到的,它给人的预期输出,无需任何注册任何东西。
IIRC有使用Qt的问题,即由于某种原因造成的,当您使用[]
接口的自动转换不一命呜呼我想,这个问题仍然是有效的,该解决方案谢天谢地是简单地不使用属性,但一个简单的返回值。
如果您的问题仍然存在,我建议仔细检查你的代码,或者如果有必要,清洁和重建项目,因为转换肯定是从属性相关的问题制定出符合市场预期,备用。