MapQuickItem 在 QML 地图中不可见
MapQuickItem not visible in QML Map
我想在 QML
地图上动态地(通过 C++)绘制一个圆,但是根据 zoomLevel,圆可能不可见。 MapCircle
没有缩放级别 属性。所以我首先创建一个 MapQuickItem
并尝试将 MapCircle
作为它的 sourceItem
。在 QML 中我有
function add_point(lat, lng){
var circle = Qt.createQmlObject('import QtLocation 5.3; MapCircle { }', map, "dynamic");
circle.center = QtPositioning.coordinate(lat, lng);
circle.radius = 5.0;
circle.color = 'blue';
circle.border.width = 1;
var item = Qt.createQmlObject('import QtLocation 5.3; MapQuickItem{}', map, "dynamic");
item.anchorPoint.x = 2.5;
item.anchorPoint.y = 2.5;
item.coordinate = QtPositioning.coordinate(lat, lng);
item.sourceItem = circle;
item.zoomLevel = 19.0
map.addMapItem(item);
map.points.push(item);
return true;
}
如果我只是画 MapCircle
在地图上可以看到一个圆圈,但是使用上面的代码,任何 zoomLevel
的屏幕上都不会出现任何内容,我已经尝试删除 zoomLevel
属性,但仍然没有出现。
MapQuickItem 用于向地图添加标准的QQuickItem。虽然 MapCircle 是一个 QQuickItem,但它不是您应该放在那里的东西。
如果您想通过 MapQuickItem 在地图上添加一个圆,您应该添加一个具有适当半径的矩形作为源项。
以下两种方法都有效
var item = Qt.createQmlObject('import QtQuick 2.7; import QtLocation 5.3; MapQuickItem{}', map, "dynamic");
item.anchorPoint = Qt.point(2.5,2.5)
item.coordinate = QtPositioning.coordinate(lat, lng);
item.zoomLevel = 10
var circle = Qt.createQmlObject('import QtQuick 2.7; Rectangle{ width: 32; height: 32; radius: 16}', map);
item.sourceItem = circle
map.addMapItem(item);
和
var item = Qt.createQmlObject('import QtQuick 2.7; import QtLocation 5.3; MapQuickItem{ sourceItem: Rectangle{ width: 32; height: 32; radius: 16}}', map, "dynamic");
item.anchorPoint = Qt.point(2.5,2.5)
item.coordinate = QtPositioning.coordinate(lat, lng);
item.zoomLevel = 10
map.addMapItem(item);
请记住,矩形大小表示以像素为单位的大小。当您将 zoomLevel 设置为 MapQuickItem 时,它在该缩放级别 变为 像素。
这意味着在缩放级别 10 时,矩形的宽度为 32 像素。在缩放级别 9 它将是 16 等等。
顺便说一下,如果你想根据缩放级别控制可见性,你应该编写可见的 属性。
类似于:
item.visible: map.zoomLevel > 10
我想在 QML
地图上动态地(通过 C++)绘制一个圆,但是根据 zoomLevel,圆可能不可见。 MapCircle
没有缩放级别 属性。所以我首先创建一个 MapQuickItem
并尝试将 MapCircle
作为它的 sourceItem
。在 QML 中我有
function add_point(lat, lng){
var circle = Qt.createQmlObject('import QtLocation 5.3; MapCircle { }', map, "dynamic");
circle.center = QtPositioning.coordinate(lat, lng);
circle.radius = 5.0;
circle.color = 'blue';
circle.border.width = 1;
var item = Qt.createQmlObject('import QtLocation 5.3; MapQuickItem{}', map, "dynamic");
item.anchorPoint.x = 2.5;
item.anchorPoint.y = 2.5;
item.coordinate = QtPositioning.coordinate(lat, lng);
item.sourceItem = circle;
item.zoomLevel = 19.0
map.addMapItem(item);
map.points.push(item);
return true;
}
如果我只是画 MapCircle
在地图上可以看到一个圆圈,但是使用上面的代码,任何 zoomLevel
的屏幕上都不会出现任何内容,我已经尝试删除 zoomLevel
属性,但仍然没有出现。
MapQuickItem 用于向地图添加标准的QQuickItem。虽然 MapCircle 是一个 QQuickItem,但它不是您应该放在那里的东西。 如果您想通过 MapQuickItem 在地图上添加一个圆,您应该添加一个具有适当半径的矩形作为源项。 以下两种方法都有效
var item = Qt.createQmlObject('import QtQuick 2.7; import QtLocation 5.3; MapQuickItem{}', map, "dynamic");
item.anchorPoint = Qt.point(2.5,2.5)
item.coordinate = QtPositioning.coordinate(lat, lng);
item.zoomLevel = 10
var circle = Qt.createQmlObject('import QtQuick 2.7; Rectangle{ width: 32; height: 32; radius: 16}', map);
item.sourceItem = circle
map.addMapItem(item);
和
var item = Qt.createQmlObject('import QtQuick 2.7; import QtLocation 5.3; MapQuickItem{ sourceItem: Rectangle{ width: 32; height: 32; radius: 16}}', map, "dynamic");
item.anchorPoint = Qt.point(2.5,2.5)
item.coordinate = QtPositioning.coordinate(lat, lng);
item.zoomLevel = 10
map.addMapItem(item);
请记住,矩形大小表示以像素为单位的大小。当您将 zoomLevel 设置为 MapQuickItem 时,它在该缩放级别 变为 像素。 这意味着在缩放级别 10 时,矩形的宽度为 32 像素。在缩放级别 9 它将是 16 等等。 顺便说一下,如果你想根据缩放级别控制可见性,你应该编写可见的 属性。 类似于:
item.visible: map.zoomLevel > 10