QT QWebEngineView加載百度地圖(轉)


Qt5.5之后使用新的QWebEngineView代替了之前的QWebKit,加載數據的方式也由同步變成了異步。所以訪問網站頁面和加載HTML頁面都需要使用QWebEngineView類。

項目要求在程序中顯示地圖,並能夠通過串口接收無人機上圖傳里的GPS實時傳回來的經緯度,並在地圖上畫出無人機的飛行軌跡。由於需要在QT中加載百度地圖,所以需要用QWebEngineView進行QT與HTML/JavaScript的交互,在HTML文件中調用百度地圖的API顯示地圖和地圖上的一些控件。因為要實時顯示無人機的位置並畫出飛行軌跡,所以還需要能夠在QT程序中調用HTML中的JS代碼,顯示位置畫出軌跡。

由於是公司的項目,不方便把完整代碼傳上來,這里只貼出加載百度地圖,並調用JS中函數的方法的代碼,做一個記錄,僅供參考。

 


效果

 


代碼之路

一、添加QWebEngineView類

要安裝QT的時候選擇安裝QWebEngineView才可以使用,使用時需要在pro文件中加入:

    QT       += webenginewidgets

二、添加QWebEngineView組件

在QT提供的控件中是找不到QWebEngineView組件的,我們使用的時候其實是把一個QWidgets組件提升為QWebEngineView的,先在ui界面拖入一個QWidgets組件,在右邊的對象中找到它,右鍵選擇提升為

三、使用QWebEngineView加載HTML文件

組件提升為QWebEngineView后,我們就可以用它來加載HTML文件,並在其中顯示

    QString htmlPath = "你的html文件的路徑";
    ui->widget->load(QUrl(htmlPath));

四、在QT中調用HTML中的函數

    // command為調用的函數,revealMarker為函數名,可以帶參數
    QString command = QString("revealMarker(%1,%2)").arg("參數1").arg("參數2");
    ui->widget->page()->runJavaScript(command);

五、HTML文件

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <title>基於GPS的位置追蹤及地理圍欄</title>
    <style type="text/css">
    	body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微軟雅黑";}
                p{margin-left:5px; font-size:14px;}
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你自己在百度地圖官網申請的秘鑰"></script>
</head>
    <body>
    <div id="allmap"></div>
    </body>
</html>
    <script type="text/javascript">

    // 百度地圖API功能
    //地圖初始化
    var map = new BMap.Map("allmap");
    map.centerAndZoom(new BMap.Point(116.404, 39.915), 5);
    var navigationControl = new BMap.NavigationControl({
      anchor: BMAP_ANCHOR_TOP_LEFT,
      type: BMAP_NAVIGATION_CONTROL_LARGE,
      enableGeolocation: true
      });
    map.addControl(navigationControl);            // 添加平移縮放控件
    map.addControl(new BMap.ScaleControl());      // 添加比例尺控件
    var overviewControl = new BMap.OverviewMapControl({anchor:BMAP_ANCHOR_BOTTOM_RIGHT,isOpen:true});
    map.addControl(overviewControl);              // 添加縮略圖控件控件
    var mapType1 = new BMap.MapTypeControl({anchor: BMAP_ANCHOR_TOP_RIGHT,mapTypes:[BMAP_NORMAL_MAP,BMAP_HYBRID_MAP]});
    map.addControl(mapType1);                     // 添加地圖類型控件
    map.enableScrollWheelZoom();   //啟用滾輪放大縮小,默認禁用
    //map.enableContinuousZoom();    //啟用地圖慣性拖拽,默認禁用
    map.enableKeyboard();          //啟用鍵盤移動地圖
    map.enableDragging();          //啟用地圖拖拽
    map.enableDoubleClickZoom();   //啟用雙擊放大

//顯示GPS經緯度坐標查詢的點
function revealMarker(lon,lat) {

}

//清除地圖上標注的點
function deletePoint(){

}

//坐標轉換完之后的回調函數
translateCallback = function (data) {
  if(data.status === 0) {
    
}

//把qt傳過來的參數加入到數組中
function addPoint(longitude, latitude) {
    
}

//濾波函數
function filter() {

}

</script>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM