qt使用高德地图并与之简单交互

  • Post author:
  • Post category:其他


通过QWebEngine加载高德地图,并通过QWebChannel与之交互。以自动补全(输入提示)功能为例演示如何使用高德JS API。



项目代码

本测试项目的qt工程已完整上传至

github



环境

QT 5.10.1

Qt Creator 4.5.1(MSVC2017 64bit)

Chrome 版本 79.0.3945.117(高于80版本的chrome目前无法远程调试QWebEngine中的html)



效果演示



拖拽


这个其实就是创建地图,不需要额外代码

在这里插入图片描述



设置城市

在这里插入图片描述



自动补全(输入提示)

在这里插入图片描述



准备工作



高德开放平台

注册账号并申请key。

这个key具体做什么用官方也没过多解释,似乎主要是用来限制散户开发者调用其接口的次数,不正确的key值会导致调用接口失败(仅仅是创建并显示地图倒是不需要key)。申请web应用的key方法很简单,也没什么门槛,按照页面说明,服务平台选择Web端(JS API)即可。

在这里插入图片描述



使用QWebEngine显示地图HTML

QWebEngine约等于程序中封装了一个chrome浏览器,会导致程序体积比较大。

在QWebEngineView中显示HTML页面跟使用浏览器打开HTML非常的类似,页面部分的开发和qt程序主体的开发还是比较独立的,最终通过QWebChannel进行交互,文章后续会有补充。

有关HTML和JavaScript的基础知识可以去W3CSchool中学习。


HTML系列教程



JavaScript教程

关于QWebEngine的使用,可以参考这篇文章


Qt嵌入浏览器(一)——QWebEngineView实现浏览器基本功能



地图HTML的编写

页面部分的编写和功能API的使用主要就要参考高德官方的API介绍和例子了。

基本上可以在

示例中心

找到你想使用的功能和教程代码。



地图的创建为例

,将源代码编辑器中的内容复制下来保存为一个html文件,注意替换一下key值部分即可。

在这里插入图片描述



mymap.html
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" />
    <title>地图显示</title>
    <style>
        html,
        body,
        #container {
   
          width: 100%;
          height: 100%;
        }
    </style>
</head>
<body>
<div id="container"></div>
<!-- 加载地图JSAPI脚本 -->
<script src="https://webapi.amap.com/maps?v=1.4.15&key=您申请的key值"></script>
<script>
    var map = new AMap.Map('container', {
   
        resizeEnable: true, //是否监控地图容器尺寸变化
        zoom:11, //初始化地图层级
        center: [116.397428, 39.90923] //初始化地图中心点
    });
</script>
</body>
</html>

剩下的就是使用QWebEngineView加载此页面了,我在ui文件中设置了QWebEngineView,只需在相关类中令QWebEngineView加载这个html即可。

ui->webengineview->load(QUrl("你的路径/mymap.html"));

如果并不需要Qt主体程序对地图信息做额外的处理,那么功能基本都可以在网页开发中完成(毕竟本身使用的就是Web开发的API,功能其实很全面),否则就需要qt能够跟html进行交互了。



使用QWebChannel与地图HTML交互

关于QWebChannel的使用,可以参考以下文章


最清晰Qt与JS通过qwebchannel交互例子


其中

qwebchannel.js

可以在

QT安装目录/Examples/Qt-5.10.1/webchannel/shared内找到

这里我再强调一下,使用QWebChannel时,用来向JS注册的类应该

额外编写一个继承自QObject的类

,使其

只包含交互必要的属性和方法

,否则虽然也可以编译运行,但是会在控制台出现很多类似Property xxxx of object xxxx has no notify signal and is not constant…的信息。意思大概是xxxx类的xxxx属性没有通知信号,当属性值在HTML中被修改时qt将无法更新属性值。

可以认为QWebChannel会默认所注册的类中的所有属性都需要进行交互,对其是否有合适的信号和槽函数进行了检测并给出了警告。从这个角度来说也应该让负责交互的类只包含必要的内容,否则可能会在交互时传递很多无用的信息增加程序负担。

在这里插入图片描述



HTML及交互类的编写



输入提示

功能为例,我们获取一个功能API的方法信息主要有三个途径:


  1. 教程

  2. 示例中心

  3. 参考手册

通常综合参考三个部分即可了解一个API能完成哪些任务以及使用方法。


交互过程中涉及信息的传递时

,基本可以通过字符串和JSON来解决。Qt5已经自带了JSON的支持,Qt的槽函数

可以使用QString类型的参数接收字符串信息



使用QJsonObje



版权声明:本文为qq_41961619原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。