QGIS二次开发第三讲

第三讲主要实现了矢量要素的标注(Label)功能,代码是在第二节的基础上进行修改

第一步:在qgis2.h文件中,增加相关头文件,主要三个头文件如下:qgslabel.h,qgslabelattribute.h qgsfield.h文件

具体代码如下所示:

#include 
#include "ui_qgis2.h"
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include
#include 

#include 

//标注添加的头文件
#include //一个用来渲染label的类,label渲染属性可以直接指定或者根据属性值动态指定
#include //此类保存了label渲染所需要的属性值,比如字大小,位置等属性
#include //此类用于将字段包装成属性表或者是数据源的形式

//添加QT 对话框的头文件
#include 
#include 


第二步:在qgis2.cpp文件,addlayer()函数增加代码,主要代码如下:

void qgis2::addLayer()
{
	//读取矢量数据
	QString myLayerPath ="../data";
	QString myLayerBaseName = "test";
	QString myPoviderName="ogr";
	QList myLayerSet;
	QgsVectorLayer* myLayer = new QgsVectorLayer(myLayerPath,myLayerBaseName,myPoviderName);
	if (myLayer->isValid())
	{

	QgsSingleSymbolRenderer *myRenderer = new QgsSingleSymbolRenderer(myLayer->geometryType());
	myLayer->setRenderer(myRenderer);
	QgsLabel * mypLabel;
	//得到关联mylayer的label指针
	mypLabel=myLayer->label();
	QgsLabelAttributes * mypLabelAttributes;
	mypLabelAttributes = mypLabel->layerAttributes();
	//得到矢量图层的字段列表
	//typedef QMap QgsFieldMap
	QgsFieldMap myFields = myLayer->dataProvider()->fields();
	for (unsigned int i=0;isetLabelField(QgsLabel::Text,myFields.size()-1);
	//设置label的颜色,需要用到labelAttribute对象
	mypLabelAttributes->setColor(Qt::black);
	mypLabelAttributes->setBufferEnabled(true);
	mypLabelAttributes->setBufferColor(Qt::yellow);
	int myType = QgsLabelAttributes::PointUnits;
	mypLabelAttributes->setBufferSize(1,myType);
	
	//启用标注
	myLayer->enableLabels(true);
	//增加矢量数据到图层注册
	QgsMapLayerRegistry::instance()->addMapLayer(myLayer,true);
	//设置画布的extent
	mpMapCanvas->setExtent(myLayer->extent());
	//设置画布的图层数据集
	myLayerSet.append(QgsMapCanvasLayer(myLayer));
	mpMapCanvas->setLayerSet(myLayerSet);
	}
	else
	{
		return;
	}
}
第三步:修改main.cpp文件,使其支持中文显示,具体代码如下:

int main(int argc, char *argv[])
{
	QgsApplication a(argc, argv,TRUE);
	//设置支持中文显示
	QTextCodec *codec=QTextCodec::codecForName("System");
	QTextCodec::setCodecForLocale(codec);
	QTextCodec::setCodecForCStrings(codec);
	QTextCodec::setCodecForTr(codec);
	qgis2 w;
	w.show();
	return a.exec();
}
最后程序执行效果如下图所示:






你可能感兴趣的:(QT&QGIS)