我有一个C ++属性
Q_PROPERTY(QList<qreal> XTickPos MEMBER _xTickPos);
我想在Repeater中使用它。在同一个QML文件中,c ++类被赋予了id
id: pw
转发器看起来像这样
Item {
anchors.fill: parent
visible: true
Repeater {
model: pw.XTickPos.length
Rectangle{
height: 50
width: 2
x: pw.XTickPos[index]
y:10
visible: true
color: "black"
border.width: 2
}
}
}
但是,屏幕上没有任何内容。如果我在QML文件中创建属性:
var xTickPos = []
并通过c ++中的Q_Invokable函数设置它
Q_INVOKABLE QList<qreal> getXTickPositions();
和QML
root.xTickPos=pw.getXTickPositions();
并使用QML属性xTickPos作为上述转发器中的模型。我检查了pw.XTickPos是否通过console.log正确填充
我在这里缺少什么?
答案 0 :(得分:1)
这个有点棘手。
文档说明你可以使用JS数组作为模型,它确实说明QList<qreal>
在返回QML时会自动转换为JS数组。
但似乎您无法使用自动转换为JS数组的QList<qreal>
作为模型。去图......
当然,最好有一个合适的模型,并提供最佳效率的适当通知。但是如果你真的想去列表属性,看来你必须在getter中手动进行转换:
QVariantList model() {
QVariantList vl;
for (auto const & v : yourList) vl.append(v);
return vl;
}
令人惊讶的是,虽然Qt可能会自动进行转换,但它似乎无法从QVariantList
中获得QList<qreal>
。
那个Qt给你......