Отображение MapPolyline на карте QML. C++/Qt

186
04 января 2018, 23:35

По заданию необходимо отобразить карту на экране и рисовать на ней линии. Пробую сделать вот так:

main.cpp

#include <QGeoPath>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QTimer>
class PathController: public QObject{
    Q_OBJECT
    Q_PROPERTY(QGeoPath geopath READ geoPath WRITE setGeoPath NOTIFY geopathChanged)
public:
    PathController(QObject *parent = 0) : QObject(parent) {}
    QGeoPath geoPath() const {
        return mGeoPath;
    }
    void setGeoPath(const QGeoPath &geoPath) {
        if(geoPath != mGeoPath) {
            mGeoPath = geoPath;
            emit geopathChanged();
        }
    }
signals:
    void geopathChanged();
private:
    QGeoPath mGeoPath;
};
int main(int argc, char *argv[]) {
    QGuiApplication app(argc, argv);
    QGeoPath path;
    path.addCoordinate(QGeoCoordinate(55.006355, 92.860984));
    path.addCoordinate(QGeoCoordinate(55.1, 93));
    path.addCoordinate(QGeoCoordinate(56.1, 92.777));
    PathController controller;
    controller.setGeoPath(path);
    QQmlApplicationEngine engine;
    engine.rootContext()->setContextProperty("pathController", &controller);
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    return app.exec();
}
#include "main.moc"

main.qml

import QtQuick 2.9
import QtQuick.Window 2.2
import QtLocation 5.6
import QtPositioning 5.6
Window {
    visible: true
    width: 640
    height: 480
    Plugin {
        id: osmMapPlugin
        name: "osm"
    }
    Map {
        anchors.fill: parent
        plugin: osmMapPlugin
        center: QtPositioning.coordinate(56.006355, 92.860984)
        zoomLevel: 10
        MapPolyline {
            id: pl
            line.width: 3
            line.color: 'red'
        }
    }
    Connections{
        target: pathController
        onGeopathChanged: {
            var lines = []
            for(var i=0; i < pathController.geopath.size(); i++){
                lines[i] = pathController.geopath.coordinateAt(i)
            }
            pl.path = lines
        }
    }
}

Однако получаю пустую карту. Линии не появляются. Вопрос - каким образом отрендеривать линии? Они ведь существуют, просто как бы "невидимы".

READ ALSO
Функция шаблон в классе

Функция шаблон в классе

Есть класс автобусЕсть после destination (маршрут который проходит) petrol (количество бензина потраченного)

167
Как загрузить xml из ресурсов для Jsoup

Как загрузить xml из ресурсов для Jsoup

Как это можно сделать? Метод parse() принимает String

207
Exception in thread &ldquo;main&rdquo; java.lang.StackOverflowError [требует правки]

Exception in thread “main” java.lang.StackOverflowError [требует правки]

Почему происходит переполнение стека, если осуществлять цикл посредством for(), хотя с циклом do-while компиляция выполняется корректно?

158
Форма записи try-catch

Форма записи try-catch

Столкнулся с кодом:

145