QT调用百度地图显示,并去掉logo,可输入经纬度定位

!!!!要用到webengineview控件就要有webenginewidgets模块,那编译器必须是msvc编译器,而且QT版本不能太低好像最低要5.6

第一,①首先是ui文件,如果有webengineview控件那直接放上去即可

②如果没有webengineview控件,可以自己写一个代码如下

widget.h

#include <QtWebEngineWidgets/QWebEngineView>
#include <QtWebEngineWidgets>




private:
    Ui::Widget *ui;
   
    QWebEngineView *mapView;

widght.cpp

mapView = new QWebEngineView(this);
mapView->setGeometry(x1,y1,x2,y2);

//setGeometry前两个参数是左上角左边,后两个参数是宽度和高度,别记混了

③可以将GraphicsView控件提升为QWebEngineView类,提升方法很简单,放一个GraphicsView控件,右键提升为就可以了,这个是看的一个大佬的方法可以去看看

QT5百度地图开发学习——GraphicsView控件提升为QWebEngineView地图显示

然后就是加载地图了,这个需要去自己写html文件,网上随便找找就有的,如果想去掉logo只需要在html文件里加上这个就得,当然百度是不允许的

<style>/*去除百度地图版权*/
		.anchorBL{
		display:none;
		} 
	</style>

这个是定位函数 添加到html文件即可

function theLocation(Longitude,Latitude) {
        
        var gpsPoint = new BMap.Point(Longitude, Latitude);
        BMap.Convertor.translate(gpsPoint, 0, translateCallback);     
            //map.clearOverlays();
            //var new_point = new BMap.Point(Longitude,Latitude );
            //var marker = new BMap.Marker(new_point);  
            //map.addOverlay(marker);              
            //map.panTo(new_point);
            //marker.setAnimation(BMAP_ANIMATION_BOUNCE); 

    }

然后是加载地图函数和定位函数

//我用的是第三种方法,所以我可以用ui->graphicsView->page();如果是前两种,改一下名字
//为webengineview即可

void Widget::on_loadMap_clicked()
{
    QWebEnginePage *page = ui->graphicsView->page();
    //QString mappathA = exepath + "/BaiduMap/baiDuMap.html";
    QString htmlPath = "E:/Qt/BaiduMap/BaiduMap/baiDuMap.html";
    //qDebug()<<mappathA;
    page->load(QUrl((htmlPath)));
}


void Widget::on_setPosition_clicked()
{
    QString Lng = ui->lineEditlng->text();//获取经度
    QString Lat = ui->lineEditlat->text();//获取纬度
    QWebEnginePage *page = ui->graphicsView->page();
    QString command = QString("theLocation(%1,%2)").arg(Lng).arg(Lat);
    page->runJavaScript(command);
}

演示:

点击加载地图 

定位

源码:https://download.csdn.net/download/qq_52926110/85352516

  • 4
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
调用百度地图接口或者一个地址的经纬度,可以使用以下步骤: 1. 在百度地图开放平台上申请API Key,获取访问百度地图API的权限。 2. 根据要求构建请求URL,如查询某个地址的经纬度可以构建以下URL: ```http http://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=YOUR_AK ``` 其中,`address`参数为要查询的地址,`output`参数为输出格式,这里选择JSON格式,`ak`参数为API Key。 3. 发送HTTP请求,获取响应数据。可以使用Qt中的`QNetworkAccessManager`类来发送HTTP请求,并使用`QJsonDocument`类来解析JSON响应数据。 ```cpp QNetworkAccessManager manager; QNetworkRequest request(QUrl("http://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=YOUR_AK")); QNetworkReply* reply = manager.get(request); QObject::connect(reply, &QNetworkReply::finished, [=]() { if (reply->error() == QNetworkReply::NoError) { QByteArray data = reply->readAll(); QJsonDocument doc = QJsonDocument::fromJson(data); if (!doc.isNull()) { // 解析JSON数据 } } else { qDebug() << "Error: " << reply->errorString(); } reply->deleteLater(); }); ``` 在解析JSON数据时,可以使用`QJsonObject`和`QJsonArray`类来获取相应的数据字段和数组。例如,要获取地址对应的经纬度,可以使用以下代码: ```cpp QJsonObject result = doc.object().value("result").toObject(); QJsonObject location = result.value("location").toObject(); double lng = location.value("lng").toDouble(); double lat = location.value("lat").toDouble(); ``` 这样就可以获取到地址对应的经纬度了。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

everything willbe OK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值