最近在学习QGIS开发,想在图上任意添加文字标注,但是发现网上关于添加文字标注的教程基本上没有,搜到的都全是显示图层自带的标注的代码,受某篇教程文章启发,自己摸索出任意位置添加文字标注的方法:
创建一个标注图层,在图层中使用QgsAnnotationPointTextItem添加标注即可。
参考代码:
QgsCoordinateTransformContext* coordinateTransformContext = new QgsCoordinateTransformContext;
//添加标记图层
QgsAnnotationLayer* annotationLayer = new QgsAnnotationLayer("Text Label", QgsAnnotationLayer::LayerOptions(*coordinateTransformContext));
// 添加一个文字标注
QgsPointXY Pos1 = m_mpTrans.transform(QgsPointXY(103, 45), Qgis::TransformDirection::Reverse);
QgsAnnotationPointTextItem* pTextItem = new QgsAnnotationPointTextItem(_T("测试文字"), Pos1);
annotationLayer->addItem(pTextItem->clone());
// 画布图层设置
QList<QgsMapLayer*> layers;
layers.insert(0, annotationLayer);
m_mpMapCanvas->setLayers(layers);
m_mpMapCanvas->setCurrentLayer(annotationLayer);
m_mpMapCanvas->setExtent(QgsCoordinateReferenceSystem("EPSG:4326").bounds());
m_mpMapCanvas->setExtent(annotationLayer->extent());
QgsProject::instance()->addMapLayer(annotationLayer);
效果如图