如何使用Qt中的QGeopath清除Mappolyline
How to clear Mappolyline using QGeopath in Qt
我使用c++中的QGeopath和Pathcontroller类绘制mapPolyline。现在我要清除该映射多段线。我正在使用Qgeopath类中的clearPath((函数,并在按钮的onclicked上调用它。如何从c++/qt中清除路径。我试过这个代码
路径控制器.h
class PathController: public QObject{
Q_OBJECT
Q_PROPERTY(QGeoPath geopath READ geoPath WRITE setGeoPath NOTIFY geopathChanged)
public:
PathController(QObject *parent = 0) : QObject(parent) {}
QGeoPath geoPath() const {
return mGeoPath;
}
void setGeoPath(const QGeoPath &geoPath) {
if(geoPath != mGeoPath) {
mGeoPath = geoPath;
emit geopathChanged();
}
}
Q_INVOKABLE void clearPath(){
mGeoPath.clearPath();
}
signals:
void geopathChanged();
private:
QGeoPath mGeoPath;
};
main.cpp
int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QGeoPath path;
// path.addCoordinate(QGeoCoordinate(55.006355, 92.860984));
path.addCoordinate(QGeoCoordinate(55.1, 93.4567));
path.addCoordinate(QGeoCoordinate(56.1, 92.777));
PathController controller;
controller.setGeoPath(path);
// path.clearPath();
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("pathController", &controller);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
main.qml
Window {
visible: true
width: 640
height: 480
Plugin{
id: osmMapPlugin
name: "here"
PluginParameter { name: "here.app_id"; value: "oBB4FivcP23m2UZQCj8K"
}
PluginParameter { name: "here.token"; value: "P-D8XRRGeVt0YphUuOImeA"
}
}
Map {
anchors.fill: parent
plugin: osmMapPlugin
center: QtPositioning.coordinate(56.006355, 92.860984)
zoomLevel: 10
MapPolyline {
id: pl
line.width: 10
line.color: 'green'
}
Button {
id: button
x: 78
y: 117
text: qsTr("clear")
onClicked: {
pathController.clearPath();
}
}
}
function loadPath(){
var lines = []
for(var i=0; i < pathController.geopath.size(); i++){
lines[i] = pathController.geopath.coordinateAt(i)
}
return lines;
}
Connections{
target: pathController
onGeopathChanged: pl.path = loadPath()
}
Component.onCompleted: pl.path = loadPath()
}
然而,我在地图上得到了一条多段线。地图多段线不清除。问题-如何清除地图多段线
您似乎在使用我之前的答案,当前mGeoPath并不意味着QML将被通知,要通知QML,您必须发出geopathChanged信号:
Q_INVOKABLE void clearPath(){
mGeoPath.clearPath();
emit geopathChanged();
}
mapPolyline.path = []
这可以清除qml
中的整条线。
相关文章:
- 清除前检查矢量
- ifstream文件在从行中读取时被清除
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- 如何清除/清空已打开的文件C++
- 如何在 c++ 中清除矢量容量?
- 可以清除递归函数中的变量吗?
- 在清除 istream 之前,我不应该需要取消获取它吗?
- 结构成员在访问时被清除
- 清除输入缓冲区后未提取字符串流
- SDL_ttf清除我之前和将来的所有渲染
- 如何使用内存集清除字符数组
- 有没有办法在c ++中清除空数组,请检查下面的代码以获取说明
- QTreeWidgetItem 设置不可选择将清除选择
- libQGLViewer 如何在没有清除缓冲区的情况下绘制
- 清除具有已删除赋值运算符的成员的类实例
- 清除结构向量时会发生什么?
- 显式清除 std::move 之后的源资源
- C++ - 重置字符串流不会重置获取位置或清除标志吗?
- std::cin 在读取 EOF 并清除后不再读取
- 如何使用Qt中的QGeopath清除Mappolyline