Qt开发示例 (QML):地图

示例演示了如何使用MapItemView在地图上搜索和显示地点列表。

Qt组件推荐:

  • QtitanRibbon| 下载试用: 遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart | 下载试用 :是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。并且支持所有主要的桌面

Places Map 示例演示了如何使用MapItemView在地图上搜索和显示地点列表。

Qt开发示例 (QML):地图

该示例显示当前位置的地图,如果没有可用位置,则使用布里斯班/澳大利亚。随后,搜索与术语“比萨”匹配的地方,并在地图上显示每个结果。

运行示例

要从Qt Creator中运行这个例子,请打开Welcome模式,从Examples中选择这个例子。更多信息,请访问构建和运行一个例子。

要编写将在地图上显示地点的 QML 应用程序,我们首先进行以下导入声明。

import QtQuick 2.0import QtPositioning 5.5import QtLocation 5.6
Plugin {    id: myPlugin    name: "osm" // "mapboxgl", "esri", ...    //specify plugin parameters if necessary    //PluginParameter {...}    //PluginParameter {...}    //...}

接下来,我们实例化一个PlaceSearchModel,我们可以使用它来指定搜索参数并执行地点搜索操作。出于说明目的,一旦模型构建完成,就会调用update()。通常,update()将被调用以响应用户操作,例如按钮单击。

daima

property variant locationOslo: QtPositioning.coordinate( 59.93, 10.76)PlaceSearchModel {    id: searchModel    plugin: myPlugin    searchTerm: "Pizza"    searchArea: QtPositioning.circle(locationOslo)    Component.onCompleted: update()}

地图是通过使用地图类型来显示的,在里面我们声明了MapItemView并提供了搜索模型和一个委托。我们使用了一个内联的委托,并且假定每个搜索结果都是PlaceSerachesult类型的。因此,我们假定我们总是可以访问地方角色,其他搜索结果类型可能没有地方角色。

Map {    id: map    anchors.fill: parent    plugin: myPlugin;    center: locationOslo    zoomLevel: 13    MapItemView {        model: searchModel        delegate: MapQuickItem {            coordinate: place.location.coordinate            anchorPoint.x: image.width * 0.5            anchorPoint.y: image.height            sourceItem: Column {                Image { id: image; source: "marker.png" }                Text { text: title; font.bold: true }            }        }    }}

最后, aPositionSource用于将地图重置为当前位置并在新区域中查找“披萨”地点。位置信息每 2 分钟更新一次,如果新位置距离上一个比萨搜索区域超过 500 米,则重新触发位置搜索。

PositionSource {    id: positionSource    property variant lastSearchPosition: locationOslo    active: true    updateInterval: 120000 // 2 mins    onPositionChanged:  {        var currentPosition = positionSource.position.coordinate        map.center = currentPosition        var distance = currentPosition.distanceTo(lastSearchPosition)        if (distance > 500) {            // 500m from last performed pizza search            lastSearchPosition = currentPosition            searchModel.searchArea = QtPositioning.circle(currentPosition)            searchModel.update()        }    }}

====================================================

想要了解或购买Qt正版授权的朋友,欢迎咨询官方客服

Qt技术交流群现已开通,QQ搜索群 “765444821”或者扫描下方二维码即可加入

Qt开发示例 (QML):地图

Qt开发示例 (QML):地图

 

标签:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年7月13日
下一篇 2021年7月13日

相关推荐

发表回复

登录后才能评论