Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何在QML中使用MapPolyline使路径在任意时间后消失?_Qt_Timer_Qml - Fatal编程技术网

Qt 如何在QML中使用MapPolyline使路径在任意时间后消失?

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 },

这是我在QML中拥有的代码。我想知道如何添加计时器,使每个坐标在任意时间后消失

        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()
}