溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Qt怎么實(shí)現(xiàn)覆蓋物交互

發(fā)布時(shí)間:2021-12-15 10:02:54 來(lái)源:億速云 閱讀:150 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹“Qt怎么實(shí)現(xiàn)覆蓋物交互”,在日常操作中,相信很多人在Qt怎么實(shí)現(xiàn)覆蓋物交互問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Qt怎么實(shí)現(xiàn)覆蓋物交互”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

一、前言

百度地圖本身提供了非常友好完善的JS函數(shù)接口用于添加各種覆蓋物,比如標(biāo)注點(diǎn)、矩形區(qū)域、圓形區(qū)域、不規(guī)則線段、弧形等,基本上涵蓋了各種應(yīng)用場(chǎng)景,官方的文檔和示例也是比較完善的,雖然示例用的都是html+js,其實(shí)只要是會(huì)寫程序的程序員都看得懂,比如Qt要與他交互的話直接傳統(tǒng)的交互方式就行,依葫蘆畫瓢將對(duì)應(yīng)的js函數(shù)寫在網(wǎng)頁(yè)文件中。百度地圖其實(shí)提供了浮動(dòng)工具欄,在線地圖和離線地圖都支持,打開浮動(dòng)工具欄以后,直接在浮動(dòng)工具欄選擇對(duì)應(yīng)的覆蓋物直接地圖上繪制就行,然后用js方法去獲取對(duì)應(yīng)覆蓋物的位置坐標(biāo)等信息。

用地圖自身的方法來(lái)設(shè)置的覆蓋物信息,會(huì)隨著地圖的縮放自動(dòng)縮放,這個(gè)還是比較好的方式,還有另外一種方式就是直接放置一個(gè)widget透明疊加在網(wǎng)頁(yè)地圖控件上,根據(jù)地圖移動(dòng)縮放等變化傳過(guò)來(lái)的信號(hào),在widget上重新繪制,這個(gè)方法對(duì)painter繪制掌握長(zhǎng)度比較高的同學(xué)很方便,畢竟繪制都交給自己來(lái)自主控制了。

二、功能特點(diǎn)

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

  2. 同時(shí)支持webkit內(nèi)核、webengine內(nèi)核、miniblink內(nèi)核、IE內(nèi)核。

  3. 支持設(shè)置多個(gè)標(biāo)注點(diǎn),信息包括名稱、地址、經(jīng)緯度。

  4. 可設(shè)置地圖是否可單擊、拖動(dòng)、鼠標(biāo)滾輪縮放。

  5. 可設(shè)置協(xié)議版本、秘鑰、主題樣式、中心坐標(biāo)、中心城市、地理編碼位置等。

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

  7. 支持地圖交互,比如鼠標(biāo)按下獲取對(duì)應(yīng)位置的經(jīng)緯度。

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

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

  10. 可設(shè)置行政區(qū)劃,指定某個(gè)城市區(qū)域繪制圖層,在線地圖自動(dòng)輸出行政區(qū)劃邊界點(diǎn)集合到j(luò)s文件給離線地圖使用。

  11. 可靜態(tài)或者動(dòng)態(tài)添加多個(gè)覆蓋物。支持點(diǎn)、折線、多邊形、矩形、圓形、弧線、點(diǎn)聚合等。

  12. 提供函數(shù)接口處理經(jīng)緯度解析成地址和地址解析成經(jīng)緯度坐標(biāo)。

  13. 提供的demo直接可以單獨(dú)選點(diǎn)執(zhí)行對(duì)應(yīng)的處理比如路線查詢。

  14. 可以拿到路線查詢到的點(diǎn)坐標(biāo)信息集合,比如用于機(jī)器人坐標(biāo)導(dǎo)航等。

  15. 封裝了豐富的函數(shù)比如刪除指定點(diǎn)和所有點(diǎn),刪除指定覆蓋物和所有覆蓋物等。

  16. 標(biāo)注點(diǎn)彈框信息可以自定義內(nèi)容,標(biāo)準(zhǔn)html格式。

  17. 標(biāo)注點(diǎn)單擊事件可選 0-不處理 1-自己彈框 2-發(fā)送信號(hào)。

  18. 標(biāo)注點(diǎn)可設(shè)置動(dòng)畫效果 0-不處理 1-跳動(dòng) 2-墜落

  19. 標(biāo)注點(diǎn)可設(shè)置本地圖片文件等。

  20. 函數(shù)接口友好和統(tǒng)一,使用簡(jiǎn)單方便,就一個(gè)類。

  21. 支持js動(dòng)態(tài)交互添加點(diǎn)、刪除點(diǎn)、清空點(diǎn)、重置點(diǎn),不需要刷新頁(yè)面。

  22. 支持任意Qt版本、任意系統(tǒng)、任意編譯器。

三、效果圖

Qt怎么實(shí)現(xiàn)覆蓋物交互

五、相關(guān)代碼

void MapBaiDu::addPolyline(QStringList &list)
{
    //覆蓋物通用屬性,包括顏色線條粗細(xì)等,可以自行更改
    QString property = getOverlayProperty();

    //動(dòng)態(tài)添加折線
    list << QString("  function addPolyline(points) {");
    list << QString("    var pts = getPoints(points);");
    list << QString("    var polyline = new %1.Polyline(pts, %2);").arg(mapFlag).arg(property);
    list << QString("    map.addOverlay(polyline);");
    list << QString("  }");
}

void MapBaiDu::addPolygon(QStringList &list)
{
    //覆蓋物通用屬性,包括顏色線條粗細(xì)等,可以自行更改
    QString property = getOverlayProperty();

    //動(dòng)態(tài)添加多邊形
    list << QString("  function addPolygon(points) {");
    list << QString("    var pts = getPoints(points);");
    list << QString("    var polygon = new %1.Polygon(pts, %2);").arg(mapFlag).arg(property);
    list << QString("    map.addOverlay(polygon);");
    list << QString("  }");
}

void MapBaiDu::addRectangle(QStringList &list)
{
    //覆蓋物通用屬性,包括顏色線條粗細(xì)等,可以自行更改
    QString property = getOverlayProperty();

    //動(dòng)態(tài)添加矩形
    list << QString("  function addRectangle(points) {");
    list << QString("    var listPoint = points.split('|');");
    list << QString("    if (listPoint.length != 2) {");
    list << QString("      return;");
    list << QString("    }");

    //將兩個(gè)坐標(biāo)拆分成四個(gè)點(diǎn)
    list << QString("    var list1 = listPoint[0].split(',');");
    list << QString("    var list2 = listPoint[1].split(',');");
    list << QString("    var ptStart = new %1.Point(list1[0], list1[1]);").arg(mapFlag);
    list << QString("    var ptEnd = new %1.Point(list2[0], list2[1]);").arg(mapFlag);
    list << QString("    var pt1 = new %1.Point(ptStart.lng, ptStart.lat);").arg(mapFlag);
    list << QString("    var pt2 = new %1.Point(ptEnd.lng, ptStart.lat);").arg(mapFlag);
    list << QString("    var pt3 = new %1.Point(ptEnd.lng, ptEnd.lat);").arg(mapFlag);
    list << QString("    var pt4 = new %1.Point(ptStart.lng, ptEnd.lat);").arg(mapFlag);
    list << QString("    var rectangle = new %1.Polygon([pt1,pt2,pt3,pt4], %2);").arg(mapFlag).arg(property);
    list << QString("    map.addOverlay(rectangle);");
    list << QString("  }");
}

void MapBaiDu::addCircle(QStringList &list)
{
    //覆蓋物通用屬性,包括顏色線條粗細(xì)等,可以自行更改
    QString property = getOverlayProperty();

    //動(dòng)態(tài)添加圓形
    list << QString("  function addCircle(points, radius) {");
    list << QString("    var listPoint = points.split('|');");
    list << QString("    var list = listPoint[0].split(',');");
    list << QString("    var ptCenter = new %1.Point(list[0], list[1]);").arg(mapFlag);
    list << QString("    var circle = new %1.Circle(ptCenter, radius, %2);").arg(mapFlag).arg(property);
    list << QString("    map.addOverlay(circle);");
    list << QString("  }");
}

void MapBaiDu::addCurveLine(QStringList &list)
{
    //覆蓋物通用屬性,包括顏色線條粗細(xì)等,可以自行更改
    QString property = getOverlayProperty();

    //動(dòng)態(tài)添加弧線
    list << QString("  function addCurveLine(points) {");
    list << QString("    var pts = getPoints(points);");
    list << QString("    var curveLine = new BMapLib.CurveLine(pts, %1);").arg(property);
    list << QString("    map.addOverlay(curveLine);");
    //弧線允許拖動(dòng)
    list << QString("    curveLine.enableEditing();");
    list << QString("  }");
}

到此,關(guān)于“Qt怎么實(shí)現(xiàn)覆蓋物交互”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

qt
AI