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

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/112871383

长期继续带来更多我的项目与技术分享,征询请加QQ:21497936、微信:yangsir198808

红瘦子(红模拟)的博文大全:开发技术汇合(蕴含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬联合等等)继续更新中…(点击传送门)

Qt开发专栏:三方库开发技术

上一篇:《地图开发笔记(一):百度地图介绍、应用和Qt内嵌地图Demo》
下一篇:继续更新…

前言

  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));
}

入坑

入坑一:中文乱码问题

问题

  

解决

  一开始输出的,从原头就须要退出QString::fromLocal8bit,如下图:
  
  
  
  

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

问题

  

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

起因

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

解决

  找到未起作用的中央,看是否真的调用到了,应用alert弹出框查看。

上一篇:《地图开发笔记(一):百度地图介绍、应用和Qt内嵌地图Demo》
下一篇:继续更新…

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/112871383

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理