如何将Qt c ++代码中的double传递给QML代码?

时间:2017-04-06 14:16:53

标签: c++ qt google-maps qml

我在Qt

中有这段代码
int main(int argc, char *argv[])  {
    QGuiApplication app(argc,argv);
       QQuickView view;
       QUrl q(QStringLiteral("QML:///places_map.qml"));
       view.setSource(QUrl(QStringLiteral("qrc:///places_map.qml")));
         //I've tried this to init qml properties
       QObject *object = view.rootObject();
         object->setProperty("latitude", 48.4656371);
         object->setProperty("longitude", 31.04900455);

         QQuickItem *item = view.rootObject();
        item->setProperty("device_latitude", 48.4656371);
        item->setProperty("device_longitude", 35.04900455);
}

我的qml文件:

import QtQuick 2.0
import QtPositioning 5.5
import QtLocation 5.6

Rectangle {
    width: 720
    height: 480

    property double latitude:  0
    property double longitude: 0
    property double device_latitude: 0 //48.4656371
    property double device_longitude: 0 //35.54900455

    property variant location: QtPositioning.coordinate(latitude, longitude)
    property variant deviceLocation: QtPositioning.coordinate(device_latitude, device_longitude)

    Plugin {
        id: myPlugin
        name: "osm"
    }
    PlaceSearchModel {
           id: searchModel

           plugin: myPlugin

           searchTerm: "Pizza"
           searchArea: QtPositioning.circle(deviceLocation)

           Component.onCompleted: update()
       }
    Map {
        id: map
        anchors.fill: parent
        plugin: myPlugin;
        center: location
        zoomLevel: 13

        MapItemView {
            model: searchModel
            delegate: MapQuickItem {
                coordinate: deviceLocation //QtPositioning.coordinate(device_latitude, device_longitude)

                anchorPoint.x: image.width * 0.5
                anchorPoint.y: image.height

                sourceItem: Column {
                    Image { id: image; source: "marker.png" }
                    Text { text: title; font.bold: true }
                }
            }
        }
    }
}

在qml代码属性中,双纬度和经度在地图上设置视图 但地图显示place with latitude = 0 and longtitude = 0

如果我在qml代码中设置了正确的坐标,一切正常 如何从c ++代码中启动此值,以便地图显示我的城市?

1 个答案:

答案 0 :(得分:0)

使用Q_PROPERTY会更好。 Exposing Attributes of C++

我的工作方式如下:

<强>的main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickItem>
#include <QQuickView>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQuickView view;
    view.setSource(QUrl(QStringLiteral("qrc:/main.qml")));

    QQuickItem *item = view.rootObject();
    item->setProperty("number", 22.002);
    view.show();
    return app.exec();
}

<强> main.qml

import QtQuick 2.4
import QtQuick.Window 2.2

Rectangle{
    visible: true
    width: 640
    height: 480
    property double number : 0

    Text {
        id: textEdit
        text: number
        verticalAlignment: Text.AlignVCenter
        anchors.top: parent.top
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.topMargin: 20
    }
}