VS2019+Qt5.15 在线显示百度地图

news2024/11/16 13:21:50

1.Qt5.15编译程序需要选择mscv2019 Release版本

2.需要到百度地图开发平台注册并获取到开发者key

3.显示地图是JS与Qt的交互过程,显示地图的html文件:

<!DOCTYPE html> 
<html>
	<head> 
		<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
		<title>BDMap Sample</title> 
		<style type="text/css"> 
			html{height:100%} 
			body{height:100%;margin:0px;padding:0px} 
			#container{height:100%} 
		</style> 
		<script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=百度地图开发平台获取的开发者key"></script> <!-- ak 写百度地图开发平台获取的开发者key -->
		<script type="text/javascript" src="qwebchannel.js"></script>   <!-- 与qt交互 -->
	</head> 

	<body> 
		<div id="container"></div>
		
		<script type="text/javascript">
			var map = new BMapGL.Map("container");           // 创建地图实例 
			var point = new BMapGL.Point(113.557892,34.8333);   // 创建点坐标 
			map.centerAndZoom(point, 15);                    // 初始化地图,设置中心点坐标和地图级别 
			map.enableScrollWheelZoom(true);                 // 设置滚轮缩放
			// map.setMapType(BMAP_EARTH_MAP);                  // 设置地图样式,地球模式    
			// 创建标点  
			var point = new BMapGL.Point(113.557892, 34.8333);   
			var marker = new BMapGL.Marker(point);        // 创建标注   
			map.addOverlay(marker);                     // 将标注添加到地图中 

			var opts = {
				width: 250,     // 信息窗口宽度
				height: 100,    // 信息窗口高度
				title: "New Marker"  // 信息窗口标题
			}
			var infoWindow = new BMapGL.InfoWindow("Marker", opts);  // 创建信息窗口对象
			marker.addEventListener("click", function(){                    // 标点添加点击事件
				map.openInfoWindow(infoWindow, map.getCenter());        // 打开信息窗口
			});

           /*****************************/
			// qt交互注册
			new QWebChannel(qt.webChannelTransport,
				function(channel){
					window.bridge = channel.objects.JSInterface; // 注册
				}
			);
            // 添加坐标
			function addMarker(lng,lat){
				var newpoint=new BMapGL.Point(lng,lat);
				var newmarker = new BMapGL.Marker(newpoint);        // 创建标注
				map.addOverlay(newmarker);
				alert('ok');
			};
			// 实时显示当前坐标 需要与Qt交互
			var updateInfo = function(lng, lat) {
				window.bridge.getCoordinates(lng, lat);
			}
			
			map.addEventListener("mousemove", function(e){
				updateInfo(e.latlng.lng, e.latlng.lat);
			});
          /******************************/
	</script> 
	</body> 
</html>

4.需要将Qt\Qt5.15.2\Examples\Qt-5.15.2\webchannel\shared下的qwebchannel.js拷贝到与html文件同级目录下

5.显示界面,需要将空间QWidget提升为QWebEngineView(需要手动输入到提升的类名称中,再点击添加,记得选择全局包含)

 6.具体实现程序:

pro中添加:QT       += webenginewidgets

h文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QWebEnginePage>
#include <QWebEngineView>
#include <QWebEngineHistory>
#include <QWebEngineHistoryItem>
#include <QtWebEngineWidgets/QtWebEngineWidgets>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_clicked();

public slots:
    //用于与html文件交互获取实时位置坐标
    void getCoordinates(QString lon, QString lat);

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

cpp文件:

#include "widget.h"
#include "ui_widget.h"

#include <QFile>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QString htmlPath = qApp->applicationDirPath() + "/html/baidumap.html";
    qDebug()<<htmlPath;

    QFile file(htmlPath);
    if(!file.exists()) {
        qDebug()<<"html file is not exists";
    }

//    QWebChannel *webChannel = new QWebChannel(ui->widget->page());
//    ui->widget->page()->setWebChannel(webChannel);
//    webChannel->registerObject(QString("JSInterface"), this);

//    ui->widget->page()->load(QUrl("file:///" + htmlPath));

    QWebEnginePage* page = new QWebEnginePage();
    QWebChannel* channel = new QWebChannel();
    channel->registerObject(QString("JSInterface"), this);
    page->load(htmlPath);
    page->setWebChannel(channel);

    ui->widget->setPage(page);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_clicked()
{
    QString lon = ui->lineEdit->text();
    QString lat = ui->lineEdit_2->text();
    QString cmd = QString("addMarker(%1, %2)").arg(lon).arg(lat);
    qDebug()<<cmd;
    ui->widget->page()->runJavaScript(cmd);
}

void Widget::getCoordinates(QString lon, QString lat)
{
    ui->lineEdit->setText(lon);
    ui->lineEdit_2->setText(lat);
}

7.程序显示

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

订单自动取消的11种实现方式(上)

一、DelayQueue DelayQueue是JDK提供的api&#xff0c;是一个延迟队列 DelayQueue泛型参数得实现Delayed接口&#xff0c;Delayed继承了Comparable接口。 getDelay方法返回这个任务还剩多久时间可以执行&#xff0c;小于0的时候说明可以这个延迟任务到了执行的时间了。 com…

企业微信小程序登录,错误码:60020

在使用企业微信wx.qy.login API进行登录获取【session_key】时&#xff0c;报出错误码&#xff1a;60020 此错误记得好像意指的是获取的企业【access_token】用以去置换登录令牌【session_key】时&#xff0c;下发【access_token】的IP地址和获取【session_key】的IP不一致&am…

kotlin Flow系列之 - 冷流SafeFlow源码解析之 - Safe在那里?

本文涉及源码基于kotlinx-coroutines-core-jvm:1.7.1 kotlin 协成系列文章: 你真的了解kotlin中协程的suspendCoroutine原理吗? Kotlin Channel系列&#xff08;一&#xff09;之读懂Channel每一行源码 kotlin Flow系列之-冷流SafeFlow源码解析之 - Safe在那里&#xff1f; ko…

【vue2动画效果】实现两组单词逐渐减短,最后只保留首字母的效果

前言 实现两组单词逐渐减短&#xff0c;最后只保留首字母的效果 效果&#xff1a; 正文 <template><div class"header"><div style"margin-right: 12px; display: inline-flex"><divclass"door"id"book1"v-f…

常用数据回归建模算法总结记录

本文的主要目的是总结记录日常学习工作中常用到的一些数据回归拟合算法&#xff0c;对其原理简单总结记录&#xff0c;同时分析对应的优缺点&#xff0c;以后需要的时候可以直接翻看&#xff0c;避免每次都要查询浪费时间&#xff0c;欢迎补充。 (1)线性回归 (Linear Regressio…

解决springboot上传中文文件报错:NoClassDefFoundError: javax/mail/internet/MimeUtility

解决springboot上传中文文件报错:NoClassDefFoundError: javax/mail/internet/MimeUtility 1. 背景&#xff1a; springboot版本&#xff1a;2.7.11 前端使用 UnityEngine.WWWForm 进行文件上传 报错信息&#xff1a;org.springframework.web.multipart.MultipartException: F…

【资料分享】RK3568开发板规格书(4x ARM Cortex-A55(64bit),主频1.8GHz)

1 开发板简介 创龙科技TL3568-EVM是一款基于瑞芯微RK3568J/RK3568B2处理器设计的四核ARM Cortex-A55国产工业评估板&#xff0c;每核主频高达1.8GHz/2.0GHz&#xff0c;由核心板和评估底板组成。核心板CPU、ROM、RAM、电源、晶振、连接器等所有器件均采用国产工业级方案&#…

【拼多多API商品详情页面采集】具体的API接口调用步骤

要从拼多多获取商品数据&#xff0c;可以使用拼多多提供的API接口。首先需要注册一个拼多多开放平台的开发者账号&#xff0c;然后创建一个应用程序&#xff0c;获取应用程序的app_id和app_secret&#xff0c;以在API请求中进行身份验证。 在使用API接口时&#xff0c;需要按照…

力扣1816. 截断句子

代码展示&#xff1a; 方法1&#xff1a;通过StringBuilder创建的变量str来记录截断得到的字符串 思路&#xff1a;遍历字符串s&#xff0c;定义一个变量count_space来记录空格出现的次数&#xff0c;当空格没有出现k次时便将字符依次连接到StringBuilder类型的变量str后&#…

Web跳转案例、表单案例

一、跳转案例 <img>&#xff1a;html元素将图像嵌入文档 <body> <img src"../images(1)/images/7.5-1.jpg"> </body> 使用a标签进行一个跳转链接 <!DOCTYPE html> <html lang"en"> <head> <meta charset&qu…

7-3学习发布订阅模式,观察者模式

7-3学习发布订阅模式&#xff0c;观察者模式 1.发布订阅模式2.观察者模式 1.发布订阅模式 前端比较重要的两个设计模式&#xff0c;发布订阅模式和观察者模式。来简单的学习下。 let fs require(fs); let person {}let event {arr:[],on(fn){this.arr.push(fn);},emit(){t…

谷歌浏览器如何实现书签同步

推荐使用GIT仓库来当做中间介质&#xff0c;实现书签上传和下载&#xff0c;可以在不同机器上的谷歌浏览器之间同步书签 这里默认已经有了Git和谷歌浏览器&#xff0c;其中谷歌浏览器可以登陆账号也可以不登录。 GIT上创建私密仓库用于存储书签的json文件&#xff0c;生成秘钥…

回归预测 | MATLAB实现PSO-GCNN粒子群算法优化分组卷积神经网络的数据多输入单输出回归预测

回归预测 | MATLAB实现PSO-GCNN粒子群算法优化分组卷积神经网络的数据多输入单输出回归预测 目录 回归预测 | MATLAB实现PSO-GCNN粒子群算法优化分组卷积神经网络的数据多输入单输出回归预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 回归预测 | MATLAB实现…

数据结构课设---C语言为主体+引用

目录 一、设计要求 二、实现方法 三、实现过程 1.链栈的实现 2.前缀表达式变后缀表达式 3.括号匹配 4.链队列的实现 5.队列实现栈 6.应用代码实现汇总 7.小猫钓鱼 文章只写了代码的实现&#xff0c;并未进行原理的讲解&#xff0c;希望大家不喜勿喷 一、设计要求 1.…

C++读取一行内个数不定的整数的方式

&#x1f4af; 博客内容&#xff1a;C读取一行内个数不定的整数的方式 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准前端&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&…

如何查询组织结构(组织结构树)

创建简单的组织表 字段1&#xff1a; 组织ID字段2&#xff1a;组织名称字段3&#xff1a;组织的父级ID -- 创建组织结构表 CREATE TABLE organization (id VARCHAR(36) PRIMARY KEY,name VARCHAR(100),parent_id VARCHAR(36) );插入几条数据 INSERT INTO organization (id, …

3D模型轻量化开发工具HOOPS与WebGL的对比分析

HOOPS是一种商业级的3D开发平台&#xff0c;由Tech Soft 3D公司开发。它提供了一套全面的工具和API&#xff0c;用于构建和展示高度复杂的3D场景和模型&#xff0c;可以在多个平台和环境中使用&#xff0c;包括Web、移动设备和桌面&#xff0c;这使得开发者能够在不同的设备上展…

Spring的事务隔离

随着应用程序复杂性的增加&#xff0c;数据库的并发读写需求也越来越高。对于一个电商平台而言&#xff0c;每天都会有数十万笔的交易数据需要处理&#xff0c;这就需要能够高效地处理并发事务。Spring作为一个强大的应用框架&#xff0c;提供了事务管理的功能&#xff0c;可以…

WhaleStudio 完成与涛思数据 TDengine 产品相互兼容性测试认证

近日&#xff0c;WhaleStudio 与涛思数据 TDengine 产品已完成相互兼容性测试认证。 白鲸开源与涛思数据的联合测试结果显示&#xff0c;Whalestudio 平台与涛思数据 TDengine 产品双方产品完全兼容&#xff0c;整体运行稳定高效。 WhaleStudio 是白鲸开源科技根据全球领先的 …

如何在海外推广一个新品牌?

在海外推广一个新品牌时&#xff0c;以下是一些步骤和策略可以帮助你&#xff1a; 1、 市场调研&#xff1a;了解目标海外市场的文化、消费者行为和偏好&#xff0c;以及竞争情况。这将帮助你了解如何定位你的品牌&#xff0c;并制定相应的推广策略。 2、 品牌定位和价值观&am…