QT5.14使用QWebChannel与百度地图数据交互

您所在的位置:网站首页 js实现百度地图定位 QT5.14使用QWebChannel与百度地图数据交互

QT5.14使用QWebChannel与百度地图数据交互

2024-07-13 08:10| 来源: 网络整理| 查看: 265

文章目录 前言一、开发环境二、开发步骤1.HTML开发1.1 qwebchannel.js1.2 sample.html这里是我用太乐地图生成的离线版本,然后自己修改生成的代码 2.QT开发 总结

前言

本文介绍了关于利用QWebchannel与百度地图进行交互传递经纬度坐标数据

以下是我参考其他人代码实现的分享以下

一、开发环境

使用的是QT5.14.2 + MSVC2017 64/32bit +win10 (MinGW默认不支持 QWebEngineView)关于怎么使用MSVC可以参考我之前的博客 QT5.14搭建MSVC(VS2017) x86 以及64位编译器开发环境搭建(GDB配置) 在这里插入图片描述

二、开发步骤 1.HTML开发 1.1 qwebchannel.js

代码如下(示例):首先在外面加入qwebchannel.js 在HTML所在的目录添加qwebchannel.js这里因为我是利用太乐地图下载的离线地图,所以会有这么多文件,如果是直接联网获取地图数据,只需要在其HTML根目录添加一个这个即可,关于怎么利用太乐地图下载地图数据我回头抽空下一篇文章写一下。加下来我放了离线跟在线地图的HTML大家自己参考 在这里插入图片描述 下面是qwebchannel.js中代码

"use strict"; var QWebChannelMessageTypes = { signal: 1, propertyUpdate: 2, init: 3, idle: 4, debug: 5, invokeMethod: 6, connectToSignal: 7, disconnectFromSignal: 8, setProperty: 9, response: 10, }; var QWebChannel = function(transport, initCallback) { if (typeof transport !== "object" || typeof transport.send !== "function") { console.error("The QWebChannel expects a transport object with a send function and onmessage callback property." + " Given is: transport: " + typeof(transport) + ", transport.send: " + typeof(transport.send)); return; } var channel = this; this.transport = transport; this.send = function(data) { if (typeof(data) !== "string") { data = JSON.stringify(data); } channel.transport.send(data); } this.transport.onmessage = function(message) { var data = message.data; if (typeof data === "string") { data = JSON.parse(data); } switch (data.type) { case QWebChannelMessageTypes.signal: channel.handleSignal(data); break; case QWebChannelMessageTypes.response: channel.handleResponse(data); break; case QWebChannelMessageTypes.propertyUpdate: channel.handlePropertyUpdate(data); break; default: console.error("invalid message received:", message.data); break; } } this.execCallbacks = {}; this.execId = 0; this.exec = function(data, callback) { if (!callback) { // if no callback is given, send directly channel.send(data); return; } if (channel.execId === Number.MAX_VALUE) { // wrap channel.execId = Number.MIN_VALUE; } if (data.hasOwnProperty("id")) { console.error("Cannot exec message with property id: " + JSON.stringify(data)); return; } data.id = channel.execId++; channel.execCallbacks[data.id] = callback; channel.send(data); }; this.objects = {}; this.handleSignal = function(message) { var object = channel.objects[message.object]; if (object) { object.signalEmitted(message.signal, message.args); } else { console.warn("Unhandled signal: " + message.object + "::" + message.signal); } } this.handleResponse = function(message) { if (!message.hasOwnProperty("id")) { console.error("Invalid response message received: ", JSON.stringify(message)); return; } channel.execCallbacks[message.id](message.data); delete channel.execCallbacks[message.id]; } this.handlePropertyUpdate = function(message) { for (var i in message.data) { var data = message.data[i]; var object = channel.objects[data.object]; if (object) { object.propertyUpdate(data.signals, data.properties); } else { console.warn("Unhandled property update: " + data.object + "::" + data.signal); } } channel.exec({type: QWebChannelMessageTypes.idle}); } this.debug = function(message) { channel.send({type: QWebChannelMessageTypes.debug, data: message}); }; channel.exec({type: QWebChannelMessageTypes.init}, function(data) { for (var objectName in data) { var object = new QObject(objectName, data[objectName], channel); } // now unwrap properties, which might reference other registered objects for (var objectName in channel.objects) { channel.objects[objectName].unwrapProperties(); } if (initCallback) { initCallback(channel); } channel.exec({type: QWebChannelMessageTypes.idle}); }); }; function QObject(name, data, webChannel) { this.__id__ = name; webChannel.objects[name] = this; // List of callbacks that get invoked upon signal emission this.__objectSignals__ = {}; // Cache of all properties, updated when a notify signal is emitted this.__propertyCache__ = {}; var object = this; // ---------------------------------------------------------------------- this.unwrapQObject = function(response) { if (response instanceof Array) { // support list of objects var ret = new Array(response.length); for (var i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3