我有一个QQuickItem
对应一个MapPolyline
对象。折线具有名为path
的属性,该属性在文档中定义为类型list<coordinate>
。 coordinate
是一种映射到C ++世界中QGeoCoordinate
的类型。我正在试图弄清楚如何从C ++中设置这个属性的值。
如果我检查项目的QMetaObject
并查找它为path
属性报告的类型,则表示类型为QJSValue
。我不清楚如何使用QObject::setProperty()
或QQmlProperty::write()
从C ++设置此值。我尝试了以下内容:
我尝试创建一个数组类型的QJSValue
,每个元素都包含我想要的坐标值,如下所示:
void set_property_points(QQuickItem *item, const QVector<QGeoCoordinate> &pointList)
{
// Get the QML engine for the item.
auto engine = qmlEngine(item);
// Create an array to hold the items.
auto arr = engine->newArray(pointList.size());
// Fill in the array.
for (int i = 0; i < pointList.size(); ++i) arr.setProperty(i, engine->toScriptValue(pointList[i]));
// Apply the property change.
item->setProperty("path", arr.toVariant());
}
这不起作用;对setProperty()
的调用会返回false
。
我还尝试将点列表填充到QVariantList
中,这似乎是我在C ++中找到的list<coordinate>
最佳匹配(QGeoCoordinate
能够被放置在QVariant
)中:
/// Apply a list of `QGeoCoordinate` points to the specified `QQuickItem`'s property.
void set_property_points(QQuickItem *item, const QVector<QGeoCoordinate> &pointList)
{
QVariantList list;
for (const auto &p : pointList) list.append(QVariant::fromValue(p));
item->setProperty("path", list);
}
这也不起作用;相同的结果。
这个过程似乎没有详细记录。我需要什么格式才能将数据投入使用?
答案 0 :(得分:1)
事实证明,文档中未提及的第三种方法实际上似乎有效。我需要像这样设置属性:
QJSValue arr; // see above for how to initialize `arr`
item->setProperty("path", QVariant::fromValue(arr));