【QT】--调用百度地图API显示

编译运行环境

  • Qt 5.15.2
  • MSVC2019
  • release编译

1、html文件

百度地图提供API示例程序
在这里插入图片描述
将代码复制到html文件中,用编辑器打开,这里用vs打开
在图中位置替换为个人申请的密钥
在这里插入图片描述

2、Qt程序

.pro文件中添加

QT       += webenginewidgets

注意:webenginewidgets仅在Qt5.6之后的版本中使用,且使用msvc2017以上生成工具编译。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWebEngineView>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();
private:
    Ui::MainWindow *ui;
    QWebEnginePage *page;
    void InitForm();
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "bridge.h"
#include <QWebChannel>
#include <QWebEngineSettings>

#define bridgeins bridge::instance()

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    InitForm();
}

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

void MainWindow::InitForm()
{
    page = ui->webView->page();//
    QString mappathA = qApp->applicationDirPath() + "/index2.html";//离线地图
    qDebug()<<mappathA;
    page->load(QUrl((mappathA)));
}
void MainWindow::on_pushButton_clicked()
{
    QString Lan=ui->Lanedit->text();
    QString Lat=ui->Latedit->text();
    QString command = QString("movepoint(%1,%2)").arg(Lan).arg(Lat);
    page->runJavaScript(command);
}


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="keywords" content="百度地图,百度地图API,百度地图自定义工具,百度地图所见即所得工具" />
    <meta name="description" content="百度地图API自定义地图,帮助用户在可视化操作下生成百度地图" />
    <title>百度地图API自定义地图</title>
    <!--引用百度地图API-->
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak="></script>

 
</head>

<body>
    <!--百度地图容器-->
    <div style="width:700px;height:550px;border:#ccc solid 1px;font-size:12px" id="map"></div>



</body>
<script type="text/javascript">
//创建和初始化地图函数:
    function initMap(){
      createMap();//创建地图
      setMapEvent();//设置地图事件
      addMapControl();//向地图添加控件
      addMapOverlay();//向地图添加覆盖物
    }
    function createMap(){
      map = new BMap.Map("map");
      map.centerAndZoom(new BMap.Point(116.347532,39.929166),13);
    }
    function setMapEvent(){
      map.enableScrollWheelZoom();
      map.enableKeyboard();
      map.enableDragging();
      map.enableDoubleClickZoom()
    }
    function addClickHandler(target,window){
      target.addEventListener("click",function(){
        target.openInfoWindow(window);
      });
    }
    function addMapOverlay(){
    }
    //向地图添加控件
    function addMapControl(){
      var scaleControl = new BMap.ScaleControl({anchor:BMAP_ANCHOR_BOTTOM_LEFT});
      scaleControl.setUnit(BMAP_UNIT_IMPERIAL);
      map.addControl(scaleControl);
      var navControl = new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT,type:BMAP_NAVIGATION_CONTROL_LARGE});
      map.addControl(navControl);
      var overviewControl = new BMap.OverviewMapControl({anchor:BMAP_ANCHOR_BOTTOM_RIGHT,isOpen:true});
      map.addControl(overviewControl);
    }

    // 用经纬度设置地图中心点

    function movepoint(x, y)
    {
        var mpoint = new BMap.Point(x, y);
        var zoom = map.getZoom();
        var maker = new BMap.Marker(mpoint);
        map.centerAndZoom(mpoint, zoom);
        map.addOverlay(maker);
    }

    var map;
      initMap();</script>
</html>

将第一步中保存的文件放在应用程序所在的目录(debug/release)中。
运行即可

运行结果

在这里插入图片描述
在这里插入图片描述

遇到的问题

直接使用百度地图提供的代码可能会运行出错,无法正常显示
在这里插入图片描述
在这里插入图片描述
经过尝试发现,将原本的api链接

api.map.baidu.com/api?type=webgl&v=1.0&ak

换成本文中使用的链接,可以解决不显示的问题,原因未知

api.map.baidu.com/api?v=2.0&ak

补充

上述两个连接的区别在于

  • 传统版本的引用(以 2.0 版本为例):http://api.map.baidu.com/api?v=2.0&ak=xxxxx
  • WebGL 版本的引用(当前为 1.0 版本):http://api.map.baidu.com/api?type=webgl&v=1.0&ak=xxxxx

百度地图JSAPI WebGL v1.0类参考

前文运行出错的可能原因

QWebEngine组件只支持MSVC编译器,不支持mingw编译器,且编译时只能使用release版本
实测在MSVC2019,release编译可实现两种版本的引用

  • 9
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值