地图开发笔记(二):Qt与百度地图js交互的基础-Qt向Js发送指令定位各大省份与城市

简介: 地图开发笔记(二):Qt与百度地图js交互的基础-Qt向Js发送指令定位各大省份与城市

前言

  Qt要与百度地图交互,百度地图提供的JS,那么交互就是Qt与JS交互,本章Qt向JS交互发送指令。


Demo

  

  


Qt控制JS

  Qt控制JS相对界面,直接使用QWebEnginePage的runJavaScript接口即可,函数接口如下:

void runJavaScript(const QString& scriptSource);
void runJavaScript(const QString& scriptSource, quint32 worldId);
void runJavaScript(const QString& scriptSource, const QWebEngineCallback<const QVariant &> &resultCallback);
void runJavaScript(const QString& scriptSource, quint32 worldId, const QWebEngineCallback<const QVariant &> &resultCallback);
  • 参数一:执行的js脚本内容
    其他参数请自行查看。


百度地图API

设置中心点和缩放等级

  

示例

var map = new BMap.Map("allmap");
var point = new BMap.Point(116.331398,39.897445);
map.centerAndZoom(point,12);

定位当前所在的城市

  LocalCity定位类

  

   LocalCityOptions该类使用回调函数传回结果

  

  LocalCityResult定位结果的结果类描述

  

示例

function myFun(result){
  var cityName = result.name;
  map.setCenter(cityName);
  alert("当前定位城市:"+cityName);
}
var myCity = new BMap.LocalCity();
myCity.get(myFun); 

设置地图缩放等级

  核心类Map

  

示例

map.setZoom(13)

定位指定的城市

  核心类Map

  

示例

map.setCenter(“长沙市”)


Demo关键代码

void BaiDuMapWidget::locateCurrentPos()
{
    _pWebEnginePage->runJavaScript(QSTRING("var geolocation = new BMap.Geolocation();"
                                   "geolocation.enableSDKLocation();"
                                   "geolocation.getCurrentPosition(function(r){"
                                   "   if(this.getStatus() == BMAP_STATUS_SUCCESS){"
                                   "       var mk = new BMap.Marker(r.point);"
                                   "       map.addOverlay(mk);"
                                   "       map.panTo(r.point);"
                                   "       alert('%1'+r.point.lng+','+r.point.lat);"
                                   "   }"
                                   "   else {"
                                   "       alert('%2'+this.getStatus());"
                                   "   }"
                                           "});").arg(QSTRING("您的位置")).arg(QSTRING("定位失败,错误码:")));
}
void BaiDuMapWidget::locateProvince(QString province)
{
    _pWebEnginePage->runJavaScript(QSTRING("map.setZoom(9);"
                                           "map.setCenter('%1')").arg(province));
}
void BaiDuMapWidget::locateCity(QString city)
{
    _pWebEnginePage->runJavaScript(QSTRING("map.setZoom(13);"
                                           "map.setCenter('%1')").arg(city));
}


工程模板:v1.1.0

  mapDemo_v1.1.0_基础模板_定位本地_定位省份_定位城市.rar

  CSDN下载地址:https://download.csdn.net/download/qq21497936/85460773


入坑

入坑一:中文乱码问题

问题

  

解决

  一开始输入的,从原头就需要加入QString::fromLocal8bit,如下图:

  

  

  

  

入坑二:百度地图获取浏览器本地定位超时(暂未解决)

问题

  

入坑三:调用一些函数无效

原因

  Js是脚本语言,当调用时,前面有错误后面的就不会执行。

解决

  找到未起作用的地方,看是否真的调用到了,使用alert弹出框查看。

相关文章
|
5月前
|
安全 数据处理 C++
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
1113 3
|
23天前
|
JavaScript 前端开发
js怎么定位不同的页面元素
在JavaScript中,有多种方法定位和选择页面元素。
|
2月前
|
设计模式 存储 JavaScript
JS:单例模式 —— 百度考题 (二)
JS:单例模式 —— 百度考题 (二)
|
2月前
|
设计模式 JavaScript 前端开发
JS:单例模式 —— 百度考题 (一)
JS:单例模式 —— 百度考题 (一)
|
2月前
|
JavaScript 前端开发 定位技术
百度地图JavaScript API v2.0创建地图
百度地图JavaScript API v2.0创建地图
36 0
|
4月前
|
XML 存储 JSON
技术笔记:Qt基础之配置文件(QSettings)
技术笔记:Qt基础之配置文件(QSettings)
120 0
|
4月前
|
调度
技术笔记:QT之深入理解QThread
技术笔记:QT之深入理解QThread
36 0
|
5月前
|
JavaScript 定位技术 API
[JS]百度地图设置城市
[JS]百度地图设置城市
46 1
下一篇
无影云桌面