如何将 Double 从 Qt c++ 代码传递到 QML 代码

How to pass double from Qt c++ code to QML code?

本文关键字:代码 QML c++ Qt Double      更新时间:2023-10-16

我在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 代码属性中,纬度和经度双精度设置地图上的视图但地图显示的地方纬度 = 0 和纵向 = 0

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

使用Q_PROPERTY会更好。公开C++的属性

我让它像这样工作:

主.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();
}

主.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
    }
}