一、前言 最常用的地图交互就几个,比如鼠标在地图上按下的时候可以拾取经纬度坐标,然后传给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 <
推荐阅读
本文介绍了Python基础知识,包括注释的使用、输出函数print的用法以及input函数的交互功能。其中涉及到字符串和整数的类型转换等内容。 ...
[详细]
蜡笔小新 2023-12-09 18:11:26
本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ...
[详细]
蜡笔小新 2023-12-14 18:16:27
Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ...
[详细]
蜡笔小新 2023-12-14 17:38:12
在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ...
[详细]
蜡笔小新 2023-12-14 17:34:00
本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ...
[详细]
蜡笔小新 2023-12-14 15:39:51
本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ...
[详细]
蜡笔小新 2023-12-14 14:02:42
本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ...
[详细]
蜡笔小新 2023-12-13 20:05:31
前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ...
[详细]
蜡笔小新 2023-12-13 09:34:59
本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ...
[详细]
蜡笔小新 2023-12-13 08:44:30
本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ...
[详细]
蜡笔小新 2023-12-12 15:58:44
本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ...
[详细]
蜡笔小新 2023-12-12 12:45:59
本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ...
[详细]
蜡笔小新 2023-12-11 21:45:03
本文介绍了在满足特定条件时如何在输入字段中使用默认值的方法和相应的代码。当输入字段填充100或更多的金额时,使用50作为默认值;当输入字段填充有-20或更多(负数)时,使用-10作为默认值。文章还提供了相关的JavaScript和Jquery代码,用于动态地根据条件使用默认值。 ...
[详细]
蜡笔小新 2023-12-10 12:35:46
查找给定字符串的所有不同回文子字符串原文:https://www ...
[详细]
蜡笔小新 2023-10-17 19:11:18
本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ...
[详细]
蜡笔小新 2023-12-12 14:38:07