最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

QT使用QML實現(xiàn)地圖繪制虛線的示例代碼

 更新時間:2023年07月04日 11:45:11   作者:喵喵叫的猴  
QML提供了MapPolyline用于在地圖上繪制線段,這篇文章主要為大家詳細介紹了QT如何使用QML實現(xiàn)在地圖上繪制虛線,需要的小伙伴可以參考一下

QML提供了MapPolyline用于在地圖上繪制線段,該線段是實線,因此我使用Canvas自定義繪制的方式在地圖上繪制線段,如圖:

鼠標在地圖上點擊后,在點擊位置添加圖標 ,當(dāng)有多個圖標被添加到地圖上后,計算各個圖標間的距離,并創(chuàng)建一個新的虛線線段組件,連接兩個圖標點,顯示距離數(shù)值。如果對自定義圖標添加拖動屬性,效果如圖:

MapDashLine.qml屬性:

  • beginCoordinate:線段起始經(jīng)緯度坐標
  • endCoordinate:線段終點經(jīng)緯度坐標
  • lineDash:虛線樣式
  • lineColor:虛線顏色
  • lineWidth:虛線粗細
  • textColor:顯示距離文字顏色
  • textPixelSize:字體大小

MapDashLine.qml源碼(我使用的是Qt5.15):

import QtQuick 2.15
import QtPositioning 5.15
 
Item {
    id:mapDashLine
    anchors.fill: parent
    property var beginCoordinate: QtPositioning.coordinate()
    property var endCoordinate: QtPositioning.coordinate()
    property var lineDash: [4,4]
    property color lineColor: "crimson"
    property int lineWidth: 2
    property color textColor: "crimson"
    property int textPixelSize: 14
    readonly property var mapItem: mapDashLine.parent
 
 
    Canvas{
        id:myCanvas
        anchors.fill: parent
        onPaint: {
            if(!mapDashLine.beginCoordinate.isValid || !mapDashLine.endCoordinate.isValid)
                return
            var ctx = getContext("2d")
            ctx.clearRect(0,0,myCanvas.width,myCanvas.height)
            ctx.strokeStyle = mapDashLine.lineColor
            ctx.lineWidth = mapDashLine.lineWidth
            ctx.setLineDash(mapDashLine.lineDash)
            //**繪制虛線
            ctx.beginPath()
            var beginPos = mapDashLine.mapItem.fromCoordinate(mapDashLine.beginCoordinate,false)
            ctx.moveTo(beginPos.x,beginPos.y)
            var endPos = mapDashLine.mapItem.fromCoordinate(mapDashLine.endCoordinate,false)
            ctx.lineTo(endPos.x,endPos.y)
            ctx.stroke()
            ctx.save()
            //**繪制文字
            var azimuth = endCoordinate.azimuthTo(beginCoordinate)
            if(azimuth>=180)
                azimuth = azimuth - 180
            var distance = endCoordinate.distanceTo(beginCoordinate)
            var text = (distance/1000).toFixed(0)+"Km"
            ctx.fillStyle = mapDashLine.textColor
            ctx.font = mapDashLine.textPixelSize+"px Arial"
            ctx.textAlign = "center"
            var centerX =  (beginPos.x+endPos.x)/2
            var centerY = (beginPos.y+endPos.y)/2
            ctx.translate(centerX,centerY)
            ctx.rotate(azimuth*Math.PI/180-Math.PI/2)
            ctx.fillText(text,0,-mapDashLine.textPixelSize/2)
            ctx.restore()
        }
    }
 
    onBeginCoordinateChanged: {
        update()
    }
    onEndCoordinateChanged: {
        update()
    }
    onLineDashChanged: {
        update()
    }
    onLineColorChanged: {
        update()
    }
    onLineWidthChanged: {
        update()
    }
    onTextColorChanged: {
        update()
    }
    onTextPixelSizeChanged: {
        update()
    }
 
    Connections{
        target: mapDashLine.mapItem
        function onZoomLevelChanged(){
            update()
        }
        function onVisibleRegionChanged(){
            update()
        }
    }
 
    function update(){
        myCanvas.requestPaint()
    }
}

到此這篇關(guān)于QT使用QML實現(xiàn)地圖繪制虛線的示例代碼的文章就介紹到這了,更多相關(guān)Qt QML地圖繪制虛線內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • do...while(0)的妙用詳細解析

    do...while(0)的妙用詳細解析

    do...while(0)消除goto語句;通常,如果在一個函數(shù)中開始要分配一些資源,然后在中途執(zhí)行過程中如果遇到錯誤則退出函數(shù),當(dāng)然,退出前先釋放資源
    2013-09-09
  • C語言多種獲取字符串長度的方法

    C語言多種獲取字符串長度的方法

    這篇文章主要介紹了C語言多種獲取字符串長度的方法,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 最大子矩陣問題實例解析

    最大子矩陣問題實例解析

    這篇文章主要介紹了最大子矩陣問題實例解析,分別列舉了Java和C語言的相關(guān)實現(xiàn),需要的朋友可以參考下
    2015-08-08
  • C++中Boost的智能指針weak_ptr

    C++中Boost的智能指針weak_ptr

    這篇文章介紹了C++中Boost的智能指針weak_ptr,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 用C語言簡單實現(xiàn)掃雷小游戲

    用C語言簡單實現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細介紹了用C語言簡單實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語言二叉樹的遍歷示例介紹

    C語言二叉樹的遍歷示例介紹

    大家好,本篇文章主要講的是C語言二叉樹的遍歷示例介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C語言基礎(chǔ)之C語言格式化輸出函數(shù)printf詳解

    C語言基礎(chǔ)之C語言格式化輸出函數(shù)printf詳解

    這篇文章主要介紹了C語言格式化輸出函數(shù)printf詳解,printf函數(shù)中用到的格式字符與printf函數(shù)中用到的格式修飾符,感興趣的小伙伴可以借鑒一下
    2023-03-03
  • 淺談2路插入排序算法及其簡單實現(xiàn)

    淺談2路插入排序算法及其簡單實現(xiàn)

    這篇文章主要介紹了淺談2路插入排序算法及其簡單實現(xiàn),雖算不上是常用的排序方法,但在數(shù)據(jù)庫等方面依然有用上的機會,需要的朋友可以參考下
    2015-08-08
  • 教你使用Matlab制作圖形驗證碼生成器(app designer)

    教你使用Matlab制作圖形驗證碼生成器(app designer)

    這篇文章主要和大家分享如何利用Matlab制作一款圖形驗證碼生成器,文中的實現(xiàn)步驟講解詳細,感興趣的小伙伴可以跟隨小編動手試一試
    2022-02-02
  • 詳解C語言中條件判斷語句if和switch的用法

    詳解C語言中條件判斷語句if和switch的用法

    這篇文章主要介紹了詳解C語言中條件判斷語句if和switch的用法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-04-04

最新評論

夏津县| 阳西县| 资阳市| 内黄县| 治县。| 通河县| 遵义市| 潜山县| 柯坪县| 襄垣县| 佛山市| 工布江达县| 关岭| 潼关县| 油尖旺区| 株洲市| 白朗县| 龙泉市| 奉化市| 通州市| 正定县| 甘孜| 遂平县| 永丰县| 临高县| 香格里拉县| 四子王旗| 八宿县| 章丘市| 武乡县| 曲靖市| 庆云县| 留坝县| 湘潭县| 松江区| 合水县| 织金县| 襄垣县| 泉州市| 湘乡市| 丽江市|