首页| 论坛| 消息
主题:Qt/C++地图最简示例/在线离线切换/地图视图切换/执行各种js函数交互
liudianwu发表于 2025-12-02 10:52
## 一、前言说明
为什么要搞个最简示例?因为整个地图组件的功能非常多,就算tab选项卡都开了好多个,还是全部演示不完全,何况还有各种结合实例,而很多用户,其实希望提供一个最简示例,几行代码,直接先跑起来,然后一步步慢慢来尝试其他的功能。编译跑起来永远都是第一步,这一步成了以后就是水到渠成的事情,如果第一步都没跑起来,那打击很大,没有继续下去的勇气。无论是二开还是开源的项目,跑起来极其重要,一定要保证用户能够有勇气继续下去,很多开源项目就死在这里,搞得焦头烂额就是跑不起来,甚是打击。
本地图组件设计初衷就是为了简单易用,所以只需要几行代码就能跑起来地图组件,先是new一个地图类,参数指定地图内核比如百度地图,然后new一个webview浏览器控件,然后这个浏览器控件放到一个布局中,如果不放布局中则需要指定大小位置,一般建议放到布局中,会自动适应调整大小。
## 二、效果图

## 三、相关代码
```cpp
#include "frmmapdemosimple.h"
#include "ui_frmmapdemosimple.h"
#include "qthelper.h"
#include "maphelper.h"
#include "maputil.h"
#include "webview.h"
frmMapDemoSimple::frmMapDemoSimple(QWidget *parent) : QWidget(parent), ui(new Ui::frmMapDemoSimple)
{
ui->setupUi(this);
this->initForm();
on_btnMapWeb_clicked();
}
frmMapDemoSimple::~frmMapDemoSimple()
{
delete ui;
}
void frmMapDemoSimple::initForm()
{
//设置右侧固定宽度
ui->frameRight->setFixedWidth(AppData::RightWidth - 50);
//实例化浏览器控件并加入到布局
webView = new WebView(this);
webView->setLayout(ui->gridLayout);
//实例化地图类
mapObj = MapHelper::getMapObj(this, AppConfig::MapDemoCore);
//传入网页控件用于执行函数
mapObj->setWebView(webView);
mapObj->setSaveFile(SaveFile);
}
void frmMapDemoSimple::runJs(const QString &js)
{
mapObj->runJs(js);
}
void frmMapDemoSimple::on_btnMapWeb_clicked()
{
mapType = 0;
mapObj->setMapLocal(false);
mapObj->setZoom(11);
mapObj->load();
}
void frmMapDemoSimple::on_btnMapLocal_clicked()
{
mapType = 0;
mapObj->setMapLocal(true);
mapObj->setZoom(5);
mapObj->load();
}
void frmMapDemoSimple::on_btnMapType_clicked()
{
//街道图卫星图切换(0-街道图/1-卫星图/2-混合图)
mapType++;
mapType = (mapType > 2 ? 0 : mapType);
this->runJs(QString("setMapType(%1)").arg(mapType));
}
void frmMapDemoSimple::on_btnRunJs_clicked()
{
QString js = ui->cboxJs->lineEdit()->text();
this->runJs(js);
}
void frmMapDemoSimple::on_btnRunJs2_clicked()
{
//具体的js函数参数接口看类中的说明
QString js;
//设置地图级别(值越大放大/越小缩小)
js = "setZoom(9)";
//设置中心点(也可以叫定位)
js = "setCenter('116.475836,40.251114')";
this->runJs(js);
//添加一个标记(北京那边)
js = QString("addMarker('测试点', '%1', '测试点')").arg("116.475836,40.251114");
//最终通过浏览器控件执行
this->runJs(js);
//测距(两个经纬度坐标)
qDebug()

浏览大图

浏览大图
下一页 (1/2)
回帖(0):

全部回帖(0)»
最新回帖
收藏本帖
发新帖