具体代码如下所示:
#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
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();
}
最后程序执行效果如下图所示: