一、前言 最常用的地图交互就几个,比如鼠标在地图上按下的时候可以拾取经纬度坐标,然后传给Qt程序,再比如对设置的设备点进行单击的时候,通知Qt程序单击了哪一个设备点,好让Qt程序识别并作出反应比如弹出对应点的详细信息或者视频预览等。让网页执行js函数这种单向的操作,其实无论何种浏览器内核都支持的,并不需要注入类或者添加qwebchannel.js文件之类的,你只需要放心大胆的调用runJavascript或者evaluateJavascript函数。而如果想要网页发送对应的数据给Qt程序的话,就需要额外的处理了。
在webkit中要实现从网页传回数据交互,只需要在网页载入完毕的信号loadFinished中注入类对象即可 webView->page()->mainFrame()->addToJavascriptWindowObject("objName", webJsData);,而在webengine控件中需要增加两步,第一步是需要在网页里面引入js文件 ,第二步是生成QWebChannel通信对象 new QWebChannel(qt.webChannelTransport, function(channel){window.receiveData = channel.objects.receiveData;}),第三步是注入类对象 QWebChannel *channel = new QWebChannel(this);channel->registerObject("objName", webJsData); webView->page()->setWebChannel(channel);
做完了上面的注入类以后,在网页中写好对应的window.receiveData即可,receiveData为对应的类的public的槽函数,这里为了复用所有的数据传回的情况,特意写了通用的receiveData函数,void receiveData(const QString &type, const QVariant &data);定义两个参数,这样就涵盖了所有的情况 type表示类型相当于唯一标识,而data是QVariant类型,即可以是字符串也可以是整数或者数组,都能自动转换的,这样的话就一个类涵盖了所有的各种可能的情况,都可以通过type来区分,通过data的类型去判断并转换数据。
二、功能特点 同时支持在线地图和离线地图两种模式。 同时支持webkit内核、webengine内核、IE内核。 支持设置多个标注点&#xff0c;信息包括名称、地址、经纬度。 可设置地图是否可单击、拖动、鼠标滚轮缩放。 可设置协议版本、秘钥、主题样式、中心坐标、中心城市、地理编码位置等。 可设置地图缩放比例和级别&#xff0c;缩略图、比例尺、路况信息等控件的可见。 支持地图交互&#xff0c;比如鼠标按下获取对应位置的经纬度。 支持查询路线&#xff0c;可设置起点位置、终点位置、路线模式、路线方式、路线方案&#xff08;最少时间、最少换乘、最少步行、不乘地铁、最短距离、避开高速&#xff09;。 可显示点线面工具&#xff0c;可直接在地图上划线、点、矩形、圆形等。 可设置行政区划&#xff0c;指定某个城市区域绘制图层&#xff0c;在线地图自动输出行政区划边界点集合到js文件给离线地图使用。 可静态或者动态添加多个覆盖物。支持点、折线、多边形、矩形、圆形、弧线、点聚合等。 函数接口友好和统一&#xff0c;使用简单方便&#xff0c;就一个类。 支持js动态交互添加点、删除点、清空点、重置点&#xff0c;不需要刷新页面。 支持任意Qt版本、任意系统、任意编译器。 三、体验地址 体验地址&#xff1a;https://pan.baidu.com/s/1uQsDQO5E5crUBN2J-nPeLQ 提取码&#xff1a;1jkp 文件名&#xff1a;bin_map.zip 国内站点&#xff1a;https://gitee.com/feiyangqingyun 国际站点&#xff1a;https://github.com/feiyangqingyun 个人主页&#xff1a;https://blog.csdn.net/feiyangqingyun 知乎主页&#xff1a;https://www.zhihu.com/people/feiyangqingyun/ 四、效果图 五、相关代码 //需要自定义继承自QObject的类来接收QWebEngineView交互数据,不然会打印很多烦人的信息 class WebJsData : public QObject {Q_OBJECT public:static WebJsData *Instance();explicit WebJsData(QObject *parent &#61; 0);public slots://定义两个参数,这样就涵盖了所有的情况 type表示类型相当于唯一标识void receiveData(const QString &type, const QVariant &data);signals:void receiveDataFromJs(const QString &type, const QVariant &data); };WebJsData *WebJsData::Instance() {static WebJsData self;return &self; }WebJsData::WebJsData(QObject *parent) { }void WebJsData::receiveData(const QString &type, const QVariant &data) {//可以在这里重新梳理好再发出去信号emit receiveDataFromJs(type, data); }list <list <list <list <list <&#39; &#43; poi.name &#43; &#39;
&#39;;");
list <
list <&#39;);"); list <地址&#xff1a;&#39;);"); list <&#39; &#43; poi.addr &#43; &#39;&#39;);"); list <&#39;);"); list <list <#if 0 list <#else list <#endif list <list <list <
推荐阅读
本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ...
[详细]
蜡笔小新 2024-11-12 13:35:26
本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ...
[详细]
蜡笔小新 2024-11-13 16:08:08
本文介绍了如何在 Vue 3 组合 API 中正确设置 setup() 函数的 TypeScript 类型,以避免隐式 any 类型的问题。 ...
[详细]
蜡笔小新 2024-11-13 13:55:22
蜡笔小新 2024-11-11 14:58:09
本文详细解析了ASP.NET 2.0中的Callback机制,不仅介绍了基本的使用方法,还深入探讨了其背后的实现原理。通过对比Atlas框架,帮助读者更好地理解和应用这一机制。 ...
[详细]
蜡笔小新 2024-11-14 10:03:15
本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ...
[详细]
蜡笔小新 2024-11-13 21:23:34
本文总结了Java初学者需要掌握的六大核心知识点,帮助你更好地理解和应用Java编程。无论你是刚刚入门还是希望巩固基础,这些知识点都是必不可少的。 ...
[详细]
蜡笔小新 2024-11-13 18:24:59
本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ...
[详细]
蜡笔小新 2024-11-13 14:22:01
本文探讨了如何在 Java 中将多参数方法通过 Lambda 表达式传递给一个接受 List 的 Function。具体分析了 `OrderUtil` 类中的 `runInBatches` 方法及其使用场景。 ...
[详细]
蜡笔小新 2024-11-12 22:25:23
重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ...
[详细]
蜡笔小新 2024-11-12 14:57:05
在PHP中,为了更高效地打开和读取目录并列出其中的文件,可以使用一个自定义函数来返回查询目录下的文件和文件夹列表。该函数会将结果以数组形式返回,并明确区分每个条目是文件还是目录,从而提供更友好和实用的输出。此外,该函数还可以进一步扩展,支持递归查询子目录,以便更全面地获取目录结构信息。 ...
[详细]
蜡笔小新 2024-11-11 23:47:53
技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ...
[详细]
蜡笔小新 2024-11-11 15:24:24
在HTML5应用中,Accordion(手风琴,又称抽屉)效果因其独特的展开和折叠样式而广泛使用。本文探讨了三种不同的Accordion交互效果,通过层次结构优化信息展示和页面布局,提升用户体验。这些效果不仅增强了视觉效果,还提高了内容的可访问性和互动性。 ...
[详细]
蜡笔小新 2024-11-04 18:09:29
在 React 应用中实现通过 POST 请求下载 PDF 文件的功能,本文提供了完整的代码示例。具体实现包括设置状态以显示加载提示,并通过控制台日志记录下载索引,确保请求的正确性和用户体验。此外,还详细介绍了如何处理响应流并将其转换为可下载的 PDF 文件,适用于需要安全传输数据的场景。 ...
[详细]
蜡笔小新 2024-11-03 12:06:00
本文深入探讨了HTML5在Web前端开发中实现大文件上传的技术细节与实践方法。通过实例分析,详细讲解了如何利用HTML5的相关特性高效、稳定地处理大文件传输问题,并提供了可供参考的代码示例和解决方案。此外,文章还讨论了常见的技术挑战及优化策略,旨在帮助开发者更好地理解和应用HTML5大文件上传技术。 ...
[详细]
蜡笔小新 2024-10-28 18:59:50