如何使用Q_PROPERTY()从C ++到QML传递折线路径

时间:2019-02-01 04:35:28

标签: qt qml

我正在尝试使用Q_PROPERTY(QVariantList path READ path)将路径从C ++传递到QML,但是它显示了一条错误消息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()的方法吗?
预先感谢。

1 个答案:

答案 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));
}