我想创建一个对象列表模型,如下例所示: http://doc.qt.io/qt-5/qtquick-models-objectlistmodel-example.html
要在QML中使用它,我需要设置上下文属性
ctxt->setContextProperty("myModel", QVariant::fromValue(dataList));
在上面的例子中,这是在main.cpp中完成的,但是,我想在定义模型的类的构造函数中这样做。有没有办法在我的类定义中获取上下文?如果没有,设置上下文的最佳做法是什么?
编辑:更多上下文:我正在做一个应该绘制一条线的QQuickItem。这个模型我想用来保存刻度线的属性,即像素位置和字符串标签,因此它不需要是可编辑的,如果缩放更改,则所有值都需要更改。我想要使用带有自定义委托的ListView绘制的刻度。因此,理想情况下我想在QQuickItem中定义我的模型,然后在QML中创建。
答案 0 :(得分:1)
有没有办法在我的班级定义中获取上下文?
将它作为构造函数参数传递应该可以解决问题;)
但是,我不建议将这样的对象用作模型。它快速而肮脏,强调脏。模型更改时效率非常低,因为视图必须重新创建所有内容,而完整的模型只会反映实际更改。
检查this实施情况。
编辑:在您澄清之后,请考虑以下bit of documentation:
在QML中透明地支持某些C ++序列类型 JavaScript数组类型。
特别是,QML目前支持:
QList<int>
QList<qreal>
QList<bool>
QList<QString> and QStringList
QVector<QString>
std::vector<QString>
QList<QUrl>
QVector<QUrl>
std::vector<QUrl>
QVector<int>
QVector<qreal>
QVector<bool>
std::vector<int>
std::vector<qreal>
std::vector<bool>
所有这些都隐式转换为JS数组,您可以直接使用JS数组作为模型数据。