!!!!要用到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);
}
演示:
点击加载地图
定位