qt - 如何使用 Q_PROPERTY() 将折线路径从 C++ 传递到 QML
问题描述
我正在尝试使用从 C++ 到 QML 的路径Q_PROPERTY(QVariantList path READ path)
,但它显示一条错误消息QML MapPolyline: Unsupported path type
。
当我在谷歌上搜索哪种数据类型适合将路径从 C++ 传递到 QML 时,结果表明我可以(也许只能)使用 QVariantList、QVariant::fromValue() 和 QGeoCoordinate。所以,据此,我的代码是这样的:
在 cpp 中(摘要)
Q_PROPERTY(QVariantList path READ path NOTIFY pathChanged)
QVariantList path() {
return m_path;
}
signals:
void pathChanged();
void DroneModel::addMarker(QObject *marker, double latitude, double longitude) {
drone->addMarker(marker, latitude, longitude);
QGeoCoordinate *coord = new QGeoCoordinate(latitude, longitude, 0);
if (coord->isValid()) {
m_path.append(QVariant::fromValue(coord));
}
emit pathChanged();
}
在 QML 中
Map {
id: map
...
MapPolyline {
id: dronePath
line.color: 'green'
line.width: 3
path: droneModel.path
/* in main.cpp,
* engine.rootContext()->setContextProperty("droneModel", &droneModel);
*/
}
MouseArea {
anchors.fill: parent
onClicked: {
var targetLocation = Qt.point(mouse.x, mouse.y);
map.addMarker(targetLocation);
}
}
function addMarker(targetLocation) {
var component = Qt.createComponent("qrc:/marker.qml");
var marker = component.createObject();
var targetCoordinate = map.toCoordinate(targetLocation);
droneModel.addMarker(marker, targetCoordinate.latitude, targetCoordinate.longitude);
}
}
实际上,我找到了一种使用 C++ 和 QML 制作折线的方法,但它没有使用 Q_PROPERTY() 和path: droneModel.path
.
有没有使用 Q_PROPERTY() 的方法?
提前致谢。
解决方案
解决了:
在cpp中,
if (coord->isValid()) {
m_path.append(QVariant::fromValue(*coord));
}
正在工作而不是
if (coord->isValid()) {
m_path.append(QVariant::fromValue(coord));
}
推荐阅读
- python - 如何在 Python 中对布尔观测值进行聚类?
- javascript - 你将如何在javascript中提取字符串的一部分(模式)
- lua - Lua:如何使用 pcall 查看循环是否崩溃
- python - 将一维 pandas 数据帧转换为 N 维 numpy 数组
- python - 在python中交换两行
- android - getActivity() 在 Fragment 中变为 null
- python - 我如何计算python中每个质心的密度?
- django - Django:复选框 Onclick 事件
- node.js - 如何等待带有嵌套 foreach 循环的 Async/Await 完成
- nim-lang - 如何从 nim 表中获取可修改的值