如何从 QML 获取 QVector<qint16> 元素?
Posted
技术标签:
【中文标题】如何从 QML 获取 QVector<qint16> 元素?【英文标题】:How to get QVector<qint16> element from QML? 【发布时间】:2018-01-11 11:40:40 【问题描述】:在我的类参数中,我在qproperty下面创建了:
Q_PROPERTY(QVector <qint16> tmrAndCont READ tmrAndCont WRITE setTmrAndCont NOTIFY tmrAndContChanged)
我已经为 get 和 read 属性创建了相关方法。 现在我有一个包含 43 个元素的 QVector。
所以我的问题是:我可以从 QML 访问我的 QVector 的元素吗?
在 main.cpp 中,我已经声明了类,并使用 engine.rootContext 将其显示给 QML。
Parameters::m_parameters = new Parameters();
engine.rootContext()->setContextProperty("parameters",Parameters::m_parameters);
【问题讨论】:
【参考方案1】:QML 没有 16 位整数的概念。我建议不要将向量直接公开为上下文属性,而是将其包装在一个QObject
派生类中,该派生类提供大小、获取和设置方法,并在您访问数据时从常规int
转换并公开它。
请注意,QML 会将QVector<int>
隐式转换为 JS 数组,但一方面,我尚未测试这是否适用于较短的整数,其次,这将是转换,这意味着您不会访问实际的底层数据,而是它的转换副本,这意味着您无法设置数据,并且如果您对数据有本地引用,它将不会反映任何更改,因为它将引用旧的转换后的 JS 数组对象。
【讨论】:
以上是关于如何从 QML 获取 QVector<qint16> 元素?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 QVector<QVector<T>> 获取 QVector<T>?
Qt - QVector 和模型视图 - 从 listView 获取自定义类的最佳方法是啥?