I want to change map.activeMapType at the app startup. I have menu mapTypeMenu with actions that change activeMapType. So I added Component.onCompleted to the MapView to trigger the needed action to switch activeMapType. But it looks like map switches to the default (street map) activeMapType again after this.
ApplicationWindow {
MapView {
id: mapview
anchors.fill: parent
map.plugin: Plugin { name: "osm" }
map.zoomLevel: 4
Component.onCompleted: {
for (var i = 0; i < mapTypeMenu.count; i++) {
if (mapTypeMenu.actionAt(i).text == "Terrain Map") {
console.log("triggered")
mapTypeMenu.actionAt(i).trigger();
console.log(mapTypeMenu.actionAt(i).text)
}
}
console.log("map compl")
}
}
}
When action from mapTypeMenu triggers, called following code:
onSelectMapType: (mapType) => {
for (var i = 0; i < mapTypeMenu.count; i++) {
mapTypeMenu.actionAt(i).checked = mapTypeMenu.actionAt(i).text === mapType.name
}
mapview.map.activeMapType = mapType
console.log("Done")
}
Output:
qml: window compl
qml: triggered
qml: Done
qml: Terrain Map
qml: map compl
QGeoTileProviderOsm: Tileserver disabled at QUrl("http://maps-redirect.qt.io/osm/5.8/satellite")
QGeoTileFetcherOsm: all providers resolved
I was able to find a solution to the problem only by using a timer:
Timer {
interval: 2
onTriggered: {
for (var i = 0; i < mapTypeMenu.count; i++) {
if (mapTypeMenu.actionAt(i).text === "Terrain Map") {
mapTypeMenu.actionAt(i).trigger();
console.log("Triggered: " + mapTypeMenu.actionAt(i).text);
}
}
}
running: true
repeat: false
}
But is there a better solution?