我正在尝试使用Q_PROPERTY(QVariantList path READ path)
将路径从C ++传递到QML,但是它显示了一条错误消息QML MapPolyline: Unsupported path type
。
当我搜索适合从C ++到QML的路径的数据类型时,结果表明我可以(也许仅)使用QVariantList,QVariant :: fromValue()和QGeoCoordinate。因此,据此,我的代码如下:
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();
}
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()的方法吗?
预先感谢。
答案 0 :(得分:1)
已解决:
在cpp中,
for (int i=0; i < payloadDTOList.size(); i++) {
if(payloadDTOList.get(i) instanceof PayloadDTO)
PayloadDTO payloadDTO = (PayloadDTO) payloadDTOList.get(i);
}
}
正在工作,而不是
if (coord->isValid()) {
m_path.append(QVariant::fromValue(*coord));
}