Qt編寫地圖綜合應用20-多瀏覽器內核

## 一、前言

本人寫Qt程序這麼多年,比較喜歡支持多個Qt版本,尤其是鍾情於支持任意Qt版本+任意系統+任意編譯器,這句話說起來簡單其實實現起來就不容易了,首先你得有個很多版本的測試環境,起碼十幾個Qt環境要的吧,四五種操作系統要的吧,還要安裝各種VS版本免不了的,畢竟win上除了默認的mingw編譯器還有很多人用的是msvc編譯器,這麼一大堆環境折騰下來,沒有個1T硬盤是不夠的,而且官網發佈Qt版本的速度相當快,最慢半年肯定來一個版本,又得測試了,每次發佈一個大的版本,除了常用的windows以外,linux要測試吧,而且現在還多出來一些國產linux系統比如deepin new start UOS之類的,也要試試吧,哎呀好累。

下面是部分代碼:

<code> 

void

WebHelper::initWebSetting() {

static

bool

isInit =

false

;

if

(!isInit) { isInit =

true

; QWebSettings *webSetting = QWebSettings::globalSettings(); webSetting->setAttribute(QWebSettings::JavascriptEnabled,

true

); webSetting->setAttribute(QWebSettings::PluginsEnabled,

true

); webSetting->setAttribute(QWebSettings::JavascriptCanOpenWindows,

true

); QWebEngineSettings *webSetting = QWebEngineSettings::globalSettings(); webSetting->setAttribute(QWebEngineSettings::JavascriptEnabled,

true

); webSetting->setAttribute(QWebEngineSettings::PluginsEnabled,

true

); webSetting->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows,

true

); } }

void

frmMapBoundary::loadMap(

bool

tool) { QString content; QString fileName = QString(

"%1/map_web.html"

).arg(AppPath); QString url =

"file:///"

+ fileName; baidu->reset(); baidu->setMapZoom(

10

); baidu->setShowOverlayTool(tool); baidu->setMapCenterPoint(

"121.414,31.1828"

); baidu->setSaveFile(

true

); baidu->setSaveFile(

false

); baidu->setFileName(fileName); content = baidu->newMap();

if

(baidu->getSaveFile()) { webView->load(QUrl(url)); webView->dynamicCall(

"Navigate(const QString&)"

, url); }

else

{ QUrl baseUrl(QString(

"%1/"

).arg(AppPath)); webView->setHtml(content, baseUrl); } }

class

WebJsData

:

public

QObject { Q_OBJECT

public

:

static

WebJsData *

Instance

()

;

explicit

WebJsData

(QObject *parent =

0

)

;

public

slots:

void

receiveData

(

const

QString &type,

const

QVariant &data)

; signals:

void

receiveDataFromJs

(

const

QString &type,

const

QVariant &data)

; }; WebJsData *WebJsData::Instance() {

static

WebJsData self;

return

&self; } WebJsData::WebJsData(QObject *parent) { }

void

WebJsData::receiveData(

const

QString &type,

const

QVariant &data) {

emit

receiveDataFromJs

(type, data)

; }/<code>

## 二、功能特點

1. 同時支持在線地圖和離線地圖兩種模式。

2. 同時支持webkit內核、webengine內核、IE內核。

3. 支持設置多個標註點,信息包括名稱、地址、經緯度。

4. 可設置地圖是否可單擊、拖動、鼠標滾輪縮放。

5. 可設置協議版本、秘鑰、主題樣式、中心座標、中心城市、地理編碼位置等。

6. 可設置地圖縮放比例和級別,縮略圖、比例尺、路況信息等控件的可見。

7. 支持地圖交互,比如鼠標按下獲取對應位置的經緯度。

8. 支持查詢路線,可設置起點位置、終點位置、路線模式、路線方式、路線方案(最少時間、最少換乘、最少步行、不乘地鐵、最短距離、避開高速)。

9. 可顯示點線面工具,可直接在地圖上劃線、點、矩形、圓形等。

10. 可設置行政區劃,指定某個城市區域繪製圖層,在線地圖自動輸出行政區劃邊界點集合到js文件給離線地圖使用。

11. 可靜態或者動態添加多個覆蓋物。支持點、折線、多邊形、矩形、圓形、弧線、點聚合等。

12. 函數接口友好和統一,使用簡單方便,就一個類。

13. 支持js動態交互添加點、刪除點、清空點、重置點,不需要刷新頁面。

14. 支持任意Qt版本、任意系統、任意編譯器。

## 三、體驗地址

國內站點:[
https://gitee.com/feiyangqingyun](
https://gitee.com/feiyangqingyun)

國際站點:[
https://github.com/feiyangqingyun](
https://github.com/feiyangqingyun)

## 四、效果圖


Qt編寫地圖綜合應用20-多瀏覽器內核


分享到:


相關文章: