从C ++访问ListView委托的文本

时间:2018-01-30 09:57:29

标签: c++ qt listview location qml

我想通过两个坐标找到一个航点路径。为此,我需要从C ++访问QML属性。我怎样才能进入下面的房产?

import QtLocation 5.6
import QtPositioning 5.6
import QtQml 2.2
Item {
    Plugin
    {
        id:osmPlugin
        name:"osm"
    }

    RouteModel
    {
        id: routeModel
        plugin: osmPlugin
        autoUpdate: true
        query: aQuery
    }
    RouteQuery
    {
        id: aQuery

    }

    property  list<string> rectx

    Repeater
    {
        id: listview
        model: routeModel.status == RouteModel.Ready ? routeModel.get(0).segments : null
        visible: model ? true : false
        delegate: Row {
            property bool hasManeuver : modelData.maneuver && modelData.maneuver.valid
            property RouteSegment routeSegment: modelData

            Text
            {
                id:tt2
                text: routeSegment.path // I need to access this value              
            }

        }   

    }

    Location
    {
        id:l1
        coordinate
        {
            latitude:0.0
            longitude:0.0
        }
    }
    Location
    {
        id:l2
        coordinate
        {

            latitude:0.0
            longitude:0.0
        }
    }

    property string someString
    property string someString1
    property string lang
    property string lang1


    function myQmlFunction(coord)                                         

    {
        someString=coord
        someString1=coord
        lang= someString.substring(0,6)
        lang1= someString1.substring(10,16)
        l1.coordinate.longitude = lang
        l1.coordinate.latitude= lang1
        l2.coordinate.longitude = lang
        l2.coordinate.latitude= lang1
        aQuery.addWaypoint(l1.coordinate,l2.coordinate)
        aQuery.travelModes=RouteQuery.CarTravel
        aQuery.routeOptimizations=RouteQuery.ShortestRoute
        routeModel.update()
        console.log("Got message:",)
        return "some return value"
    }

}

1 个答案:

答案 0 :(得分:0)

我使用此方法将数据从QML传递到C ++

首先,您需要创建一个类(MyClass)并将其连接到Qml,为此请参阅this tuto on youtube

接下来,对我来说,我使用MouseArea将数据传输到MyClass中的c ++ MyFunction:

delegate: Rectangle {
    width: parent.width
    Text {
        id: txt
        text: modelData
        anchors.centerIn: parent
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            listView.currentIndex = index
            label.text = MyClass.MyFunction(txt.text)
        }
    }
}

如果您不想在MouseArea中使用Component.onCompleted Text,请致电MyClass.MyFunction(txt.text)