Qt 如何在QML中使用MapPolyline使路径在任意时间后消失?
这是我在QML中拥有的代码。我想知道如何添加计时器,使每个坐标在任意时间后消失Qt 如何在QML中使用MapPolyline使路径在任意时间后消失?,qt,timer,qml,Qt,Timer,Qml,这是我在QML中拥有的代码。我想知道如何添加计时器,使每个坐标在任意时间后消失 MapPolyline { id: mapPolyLine line.width: 8 line.color: "blue" path: [ { latitude: -34, longitude: 129.0 },
MapPolyline {
id: mapPolyLine
line.width: 8
line.color: "blue"
path: [
{ latitude: -34, longitude: 129.0 },
{ latitude: -35, longitude: 133.0 },
{ latitude: -34, longitude: 135.0 },
{ latitude: -33, longitude: 134.0 }
]
}
逻辑是将每个坐标与标识符关联,因此当触发任何计时器时,使用标识符获取索引,然后将其从模型中删除。每次更改模型中的项目数时,都会重新计算路径
import QtQuick 2.12
import QtQuick.Window 2.12
import QtLocation 5.15
import QtPositioning 5.15
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
ListModel{
id: polylineModel
dynamicRoles: true
onCountChanged: ()=> _internals.updatePolyline()
}
QtObject{
id: _internals
property int identifier_counter: 0
function updatePolyline(){
var path = []
for(var i =0; i < polylineModel.count; ++i){
var obj = polylineModel.get(i);
path.push({"latitude": obj.latitude, "longitude": obj.longitude});
}
mapPolyLine.path = path
}
function deletePoint(identifier){
for(var i =0; i < polylineModel.count; ++i){
var obj = polylineModel.get(i);
if(obj.identifier === identifier){
polylineModel.remove(i);
break
}
}
}
property Component timerComponent: Timer{
id: timer
repeat: false
required property int identifier
onTriggered: ()=> {
destroy();
_internals.deletePoint(identifier)
}
}
function appendPoint(latitude, longitude, interval){
var timer = timerComponent.createObject(polylineModel,
{"identifier": identifier_counter,
"interval": interval
})
timer.start();
polylineModel.append({"longitude": longitude, "latitude": latitude, "identifier": identifier_counter})
identifier_counter++;
}
function init(){
appendPoint(-34, 129, 1000);
appendPoint(-35, 133, 5000);
appendPoint(-34, 135, 3000);
appendPoint(-33, 134, 2000);
}
}
Map {
anchors.fill: parent
plugin: Plugin{
name: "osm"
}
center: QtPositioning.coordinate(-34, 135)
zoomLevel: 8
MapPolyline {
id: mapPolyLine
line.width: 8
line.color: "blue"
}
}
Component.onCompleted: _internals.init()
}
导入QtQuick 2.12
导入QtQuick.Window 2.12
导入位置5.15
进口QT5.15
窗口{
宽度:640
身高:480
可见:正确
标题:qsTr(“你好世界”)
列表模型{
id:多段线模型
动画片:真的
onCountChanged:()=>_internal.updatePolyline()
}
QtObject{
id:_内部构件
属性int标识符\ u计数器:0
函数updatePolyline(){
变量路径=[]
对于(变量i=0;i{
破坏();
_deletePoint(标识符)
}
}
功能点(纬度、经度、间隔){
var timer=timerComponent.createObject(polylineModel,
{“标识符”:标识符\计数器,
“间隔”:间隔
})
timer.start();
追加({“经度”:经度,“纬度”:纬度,“标识符”:标识符\计数器})
标识符_计数器++;
}
函数init(){
附加点(-341291000);
附加点(-35135000);
附加点(-341353000);
附加点(-331342000);
}
}
地图{
锚定。填充:父级
插件:插件{
名称:“osm”
}
中心:QT定位坐标(-34135)
zoomLevel:8
地图多段线{
id:mapPolyLine
线宽:8
线条颜色:“蓝色”
}
}
Component.onCompleted:_internals.init()
}