我们都知道在网页在可以打开高德地图,是用浏览器打开的,而高德地图也提供API供开发者使用
,概述-Web服务 API | 高德地图API高德开放平台官网https://lbs.amap.com/api/webservice/summary/这个时候如果开发地图位置相关的程序就可以使用高德的API来显示相应的位置,本篇介绍Qt调用高德API显示地图,QT中使用QWebEngineView显示地图,在工程中要添加 webenginewidgets模块下面是具体代码示例:
QT += core gui webenginewidgets
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QWebEngineView>
#include <QWebEngineSettings>
#include <QWebEnginePage>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void initView();
void initData();
private slots:
void slotPageLoadFinished(bool isFinished); // 地图加载完毕槽函数
public slots:
void slotMapClickCallback(); // 点击地图时槽函数,
private:
Ui::MainWindow *ui;
QWebEngineView *m_pWebView;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
initView();
initData();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initView()
{
m_pWebView = new QWebEngineView(this);
m_pWebView->setGeometry(this->rect());
connect(m_pWebView, SIGNAL(loadFinished(bool)), this, SLOT(slotPageLoadFinished(bool)));
m_pWebView->settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, true);
m_pWebView->settings()->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, true);
m_pWebView->settings()->setAttribute(QWebEngineSettings::JavascriptCanAccessClipboard,true);
m_pWebView->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true);
m_pWebView->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true);
m_pWebView->settings()->setAttribute(QWebEngineSettings::AutoLoadImages,true);
m_pWebView->settings()->setAttribute(QWebEngineSettings::PluginsEnabled, true);
}
void MainWindow::initData()
{
m_pWebView->load(QUrl("qrc:/gaode.html"));
}
void MainWindow::slotPageLoadFinished(bool isFinished)
{
//108.761462, 34.452136
qDebug() << "slotPageLoadFinished====================================" << isFinished;
m_pWebView->page()->runJavaScript(QString("loadfinishtip(108.761462, 34.452136)"));
}
void MainWindow::slotMapClickCallback()
{
}
加载的页面是一个html,内容如下
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<title>高德地图</title>
<link rel="stylesheet" href="http://cache.amap.com/lbs/static/main1119.css"/>
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=你申请的key"></script>
<script type="text/javascript" src="http://cache.amap.com/lbs/static/addToolbar.js"></script>
</head>
<body>
<div id="container"></div>
<script>
var mymap = new AMap.Map('container', {
resizeEnable: true,//是否监控地图容器尺寸变化
zoom:11, //初始化地图层级(放大倍数)
//center: [116.397428, 39.90923] //初始化地图中心点
});
//C++动态传坐标参数
function loadfinishtip(lng, lat) {
//alert("amap load finish." + lng + lat);
//mymap.setCenter([108.761462, 34.452136]);
mymap.setCenter([lng, lat]);
var marker = new AMap.Marker({position:[lng, lat], map:mymap});//添加标注
}
</script>
</body>
</html>
运行结果如下: