QML自定义列表数据类型
QML Custom List Data type
我想知道是否可以在qml中定义可以在qml中使用的自定义列表类。
目前,我正在解析或多或少复杂的数据结构,并将其转换为QvariantMap,Qvariantlist和Qvariants的树。
但是,这些类型可能包括大多数基本类型的大型数组(UINT8_T,UINT16_T,...,UINT64_T,INT8_T,...,float,double(。
如果出于明显的性能原因,我不必将这些数组复制到QVariantList中,我会更喜欢它。
有什么方法可以将数组包装在自定义类型中,该定制类型以QML理解的方式提供项目访问,因此仅在要求时将元素复制到QVariant?
我尝试使用Q_INVOKABLE operator[]
注册一种类型,但似乎不起作用。
更新:澄清更多。我知道我可以创建一个具有自定义属性的类,可以提供访问者方法。但是,使用QVariantList方法,我可以在qml
中进行以下操作onMessage: {
element.text = message.poses[0].position.x
}
我正在寻找一种包装数组的方法只有包装器应完全透明用户。
您可以将数组包装在QObject
中,并将其作为上下文属性传递给QML部分。
例如,在qml中使用整数向量:
class ArrayInterface: public QObject
{
Q_OBJECT
using value_t = int;
public:
ArrayInterface(std::vector<value_t> const& src): QObject(), source(src)
{}
// Can be called from QML
Q_INVOKABLE int get(int idx) const
{
return source[idx];
}
private:
std::vector<value_t> const& source;
};
int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
std::vector<int> vec = {12, 4, 5, 7};
ArrayInterface data(vec);
QQuickView view;
view.rootContext()->setContextProperty("myArray", &data);
view.setSource(QUrl(QStringLiteral("qrc:/main.qml")));
view.show();
return app.exec();
}
Item {
height: 500
width: 500
Text { text: myArray.get(0) }
}
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 使用简单类型列表实现的指数编译时间.为什么
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- C++多种数据类型的列表.遗产
- 在数据类型类的列表中查找 elem
- QML自定义列表数据类型
- C++ 从文本文件数据类型读取为结构,并将数据存储在列表的向量中
- 抽象数据类型命名约定:(动态)数组,向量,序列,列表,容器,缓冲区
- 从自定义数据类型列表中删除时出现 C2678 错误
- 用于查询自定义数据类型列表的SQLite虚拟表
- 无法理解未排序列表和通用数据类型
- C#数组列表的C++等价物,用于保存多个数据类型
- 对抽象数据类型的stl::列表排序
- STL列表-作为指针对象的数据类型
- 八度值列表数据类型