Qt 中的 GeocodeModel
GeocodeModel in Qt
我正在使用 QT/QML 编写一个小应用程序,我的应用程序中的 GeocodeModel 有问题。我不知道,为什么它不起作用。我是用 YT 教程做的,但它起作用了。
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Window 2.0
import QtLocation 5.6
import QtPositioning 5.6
ApplicationWindow {
id: app_window
visible: true
width: 1024
height: 800
title: qsTr("Navigation")
PositionSource {
active: true
onPositionChanged: {
map_id.center = position.coordinate;
}
}
Rectangle {
id: mapRectangleID
width: 1024
height: 800
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
Map {
id: map_id
anchors.fill: parent
plugin: Plugin { name: "osm" }
center: QtPositioning.coordinate(51.320729390711975,12.280097007751465)
zoomLevel: 15
MapQuickItem {
//coordinate: QtPositioning.coordinate(59.91, 10.75)
sourceItem: Image {
id: endPointImage
source: "assets/marker.png"
width: 40.1
height: 34.3
} //size and position of maker
anchorPoint.x: endPointImage.width / 2
anchorPoint.y: endPointImage.height
} //marker
RouteModel {
id: routeBetweenPoints
plugin: Plugin { name: "osm" }
query: RouteQuery {id: routeQuery }
Component.onCompleted: {
routeQuery.addWaypoint(QtPositioning.coordinate(51.318784,12.2773504 ));
routeQuery.addWaypoint(QtPositioning.coordinate(51.3117764,12.280909000000065 ));
//routeQuery.addWaypoint(endPointGeaocodeModel)
update();
}
} //start and end point
MapItemView {
model: routeBetweenPoints
delegate: Component {
MapRoute {
route: routeData
line.color: "red"
line.width: 10
}
}
}//linie, die beide punkte verbindet
GeocodeModel{
id: endPointGeaocodeModel
plugin: Plugin { name: "osm" }
query: "Sandakerveien 116, Oslo"
onLocationsChanged: {
if (count)
endPointImage.coordinate = get(0).coordinate;
}
Component.onCompleted: update()
} //suche den platz mit strasse und stadt
Rectangle{
id:_ifStartPointLongitude
width: 100
height: 20
border.color: 'gray'
border.width: 2
x: 900
y: 120
anchors.left: app_window.right
TextInput {
id: txtPlainStartPointLongitude
anchors.fill: parent
anchors.margins: 4
}
}
} //all widgets and items of map
} //size and position of map
}
并且此元素不起作用:
GeocodeModel{
id: endPointGeaocodeModel
plugin: Plugin { name: "osm" }
query: "Sandakerveien 116, Oslo"
onLocationsChanged: {
if (count)
endPointImage.coordinate = get(0).coordinate;
}
Component.onCompleted: update()
} //suche den platz mit strasse und stadt
我也试过别的城市,街道,还是不行。谁能给我解释一下,我 did/wrote 哪里错了?
问题是因为item Image没有坐标属性,有坐标属性的是MapQuickItem,所以我们必须把它设置到那个item所以我们必须给 MapQuickItem 一个 id,为了观察图像,我们将把地图的中心建立到相同的坐标。
// ...
MapQuickItem {
id: marker_id // <---
sourceItem: Image {
id: endPointImage
source: "assets/marker.png"
width: 100
height: 100
} //size and position of maker
anchorPoint.x: endPointImage.width / 2
anchorPoint.y: endPointImage.height
} //marker
// ...
GeocodeModel{
id: endPointGeaocodeModel
plugin: Plugin { name: "osm" }
query: "Sandakerveien 116, Oslo"
onLocationsChanged: {
if (count> 0){
marker_id.coordinate = get(0).coordinate // <----
map_id.center = get(0).coordinate // <----
}
}
Component.onCompleted: update()
} //suche den platz mit strasse und stadt
// ...
我正在使用 QT/QML 编写一个小应用程序,我的应用程序中的 GeocodeModel 有问题。我不知道,为什么它不起作用。我是用 YT 教程做的,但它起作用了。
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Window 2.0
import QtLocation 5.6
import QtPositioning 5.6
ApplicationWindow {
id: app_window
visible: true
width: 1024
height: 800
title: qsTr("Navigation")
PositionSource {
active: true
onPositionChanged: {
map_id.center = position.coordinate;
}
}
Rectangle {
id: mapRectangleID
width: 1024
height: 800
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
Map {
id: map_id
anchors.fill: parent
plugin: Plugin { name: "osm" }
center: QtPositioning.coordinate(51.320729390711975,12.280097007751465)
zoomLevel: 15
MapQuickItem {
//coordinate: QtPositioning.coordinate(59.91, 10.75)
sourceItem: Image {
id: endPointImage
source: "assets/marker.png"
width: 40.1
height: 34.3
} //size and position of maker
anchorPoint.x: endPointImage.width / 2
anchorPoint.y: endPointImage.height
} //marker
RouteModel {
id: routeBetweenPoints
plugin: Plugin { name: "osm" }
query: RouteQuery {id: routeQuery }
Component.onCompleted: {
routeQuery.addWaypoint(QtPositioning.coordinate(51.318784,12.2773504 ));
routeQuery.addWaypoint(QtPositioning.coordinate(51.3117764,12.280909000000065 ));
//routeQuery.addWaypoint(endPointGeaocodeModel)
update();
}
} //start and end point
MapItemView {
model: routeBetweenPoints
delegate: Component {
MapRoute {
route: routeData
line.color: "red"
line.width: 10
}
}
}//linie, die beide punkte verbindet
GeocodeModel{
id: endPointGeaocodeModel
plugin: Plugin { name: "osm" }
query: "Sandakerveien 116, Oslo"
onLocationsChanged: {
if (count)
endPointImage.coordinate = get(0).coordinate;
}
Component.onCompleted: update()
} //suche den platz mit strasse und stadt
Rectangle{
id:_ifStartPointLongitude
width: 100
height: 20
border.color: 'gray'
border.width: 2
x: 900
y: 120
anchors.left: app_window.right
TextInput {
id: txtPlainStartPointLongitude
anchors.fill: parent
anchors.margins: 4
}
}
} //all widgets and items of map
} //size and position of map
}
并且此元素不起作用:
GeocodeModel{
id: endPointGeaocodeModel
plugin: Plugin { name: "osm" }
query: "Sandakerveien 116, Oslo"
onLocationsChanged: {
if (count)
endPointImage.coordinate = get(0).coordinate;
}
Component.onCompleted: update()
} //suche den platz mit strasse und stadt
我也试过别的城市,街道,还是不行。谁能给我解释一下,我 did/wrote 哪里错了?
问题是因为item Image没有坐标属性,有坐标属性的是MapQuickItem,所以我们必须把它设置到那个item所以我们必须给 MapQuickItem 一个 id,为了观察图像,我们将把地图的中心建立到相同的坐标。
// ...
MapQuickItem {
id: marker_id // <---
sourceItem: Image {
id: endPointImage
source: "assets/marker.png"
width: 100
height: 100
} //size and position of maker
anchorPoint.x: endPointImage.width / 2
anchorPoint.y: endPointImage.height
} //marker
// ...
GeocodeModel{
id: endPointGeaocodeModel
plugin: Plugin { name: "osm" }
query: "Sandakerveien 116, Oslo"
onLocationsChanged: {
if (count> 0){
marker_id.coordinate = get(0).coordinate // <----
map_id.center = get(0).coordinate // <----
}
}
Component.onCompleted: update()
} //suche den platz mit strasse und stadt
// ...