2017-04-06 87 views
0

我有这样的代码在Qt的如何从Qt C++代码传递double到QML代码?

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++代码初始化该值,以便地图显示我的城市?

回答

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 
    } 
} 
+0

感谢您的回答, 纬度和经度现在工作以及与以前的C++代码 我有三编辑你的代码以获取其他数据(device_latitute和device_longtitude),但它不起作用,请你看看我更新后的代码? – Dmitry

+0

你缺少#包含吗?看到我更新的答案。 –