地图开发笔记(二):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弹出框查看。

相关文章
|
2月前
|
监控 JavaScript 算法
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
197 77
|
20天前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
172 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
5月前
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
64 5
|
2月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
68 5
|
6月前
|
Linux iOS开发 开发者
Qt问题(二):无法定位程序输入点于动态链接库
动态链接库(Dynamic Link Library,简称DLL)是一种可执行文件格式,常见于Windows操作系统中,而在Linux和macOS等其他操作系统中,相似的概念通常被称为共享库(Shared Library)。动态链接库允许程序在运行时加载所需的代码和数据,而不是在编译时静态链接到应用程序中。这种方式带来了几个重要的优点:
547 3
|
2月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
59 4
|
2月前
|
设计模式 前端开发 JavaScript
揭秘!前端大牛们如何巧妙利用JavaScript,打造智能交互体验!
【10月更文挑战第30天】前端开发领域充满了无限可能与创意,JavaScript作为核心语言,凭借强大的功能和灵活性,成为打造智能交互体验的重要工具。本文介绍前端大牛如何利用JavaScript实现平滑滚动、复杂动画、实时数据更新和智能表单验证等效果,展示了JavaScript的多样性和强大能力。
71 4
|
3月前
|
存储 JavaScript 前端开发
【JavaScript】网页交互的灵魂舞者
本文介绍了 JavaScript 的三种引入方式(行内、内部、外部)和基础语法,包括变量、数据类型、运算符、数组、函数和对象等内容。同时,文章还详细讲解了 jQuery 的基本语法和常用方法,如 `text()`、`html()`、`val()`、`attr()` 和 `css()` 等,以及如何插入和删除元素。通过示例代码和图解,帮助读者更好地理解和应用这些知识。
45 1
【JavaScript】网页交互的灵魂舞者
|
4月前
|
存储 JSON JavaScript
JavaScript帮我编写快递自动分拣的代码,区分省份市区县城乡镇
JavaScript帮我编写快递自动分拣的代码,区分省份市区县城乡镇在JavaScript中编写一个用于快递自动分拣的代码,区分省份、市区、县、城乡镇,通常意味着你需要一个数据结构来存储这些地理区域的信息,并编写逻辑来根据快递地址中的信息将其分配到正确的分类中。 这里,我将提供一个简化的示例,说明如何使用JavaScript对象和函数来实现这一功能。请注意,这个示例是高度简化的,并且假设你已经有了某种方式(如正则表达式或API调用)来从快递地址中提取省份、市区、县等信息。 ----------------------------------- ©著作权归作者所有:来自51CTO博客作者goS
|
4月前
|
JavaScript 前端开发
js怎么定位不同的页面元素
在JavaScript中,有多种方法定位和选择页面元素。