QgsRenderer类:该类有4个子类,用于不同场合下的图层绘制,定制图层显示外观,一般采用QgsSingleSymbolRenderer类,该类用单一的符号显示图层所有的图元要素。
QgsSymbol类,对QT的绘制进行了封装,提供定制绘制的符号,对于线状类型的图层,可以设置线的颜色、线的宽度及线的样式,对于面状图层,可以设置充填颜色、充填样式,对于点状图层,可以设置点的样式、颜色等等。
设置图层外观主要分为两步,第一步设置图层的符号对象,第二步将图层符号添加到QgsSingleSymbolRenderer类中。
下面给出设置不同类型图层外观的代码:
1)对于点状图层
//设置点标号
QgsSymbol *pSym1=new QgsSymbol(QGis::Point);
//设置点的外轮廓线的颜色和线宽
pSym1->setColor(Qt::black);
pSym1->setLineWidth(0.3);
//设置充填颜色和充填样式
pSym1->setFillColor(QColor(228,108,119));
pSym1->setFillStyle(Qt::SolidPattern);
//设置符号大小
pSym1->setPointSize(1.0);
//该方法决定了标号的形状
//pSym1->setNamedPointSymbol("svg:education_school.svg");
pSym1->setNamedPointSymbol("hard:circle");
//设置绘制的符号
QgsSingleSymbolRenderer *mypRenderer1 = new QgsSingleSymbolRenderer(pLayer1->geometryType());
mypRenderer1->addSymbol(pSym1);
//应用于图层
pLayer1->setRenderer(mypRenderer1);
需要注意的是:使用setNamedPointSymbol(QString)方法设置符号的显示样式,该方法提供了两种显示方式,一种是"hard:符号类型"样式,采用QGIS内置的符号样式,如("hard:circle")表示显示圆形符号,另外一种"svg:svg文件名"样式,表示已制定的svg文件显示点符号,如("svg:education_school.svg")表示以education_school.svg文件显示符号,要使用svg样式,需要指定svg文件所在的路径,可以在main()函数中,用如下方法指定:
QgsApplication a(argc,argv,true);
//设置svg文件的缺省路径
QStringList strList;
strList.append("..\\symbol");
a.setDefaultSvgPaths(strList);
2)对于面状图层
//设置面状标号
QgsSymbol *pSym3=new QgsSymbol(QGis::Polygon);
pSym3->setFillColor(QColor(196,230,197));
pSym3->setFillStyle(Qt::SolidPattern);
pSym3->setColor(QColor(255,255,0));
pSym3->setLineWidth(0.8);
//设置图层绘制器
QgsSingleSymbolRenderer *mypRenderer3 = new QgsSingleSymbolRenderer(pLayer3->geometryType());
mypRenderer3->addSymbol(pSym3);
pLayer3->setRenderer(mypRenderer3);
3)对于线状图层
//设置线标号
QgsSymbol *pSym2=new QgsSymbol(QGis::Line);
pSym2->setColor(QColor(0,0,255));
//pSym2->setLineStyle(Qt::DashLine);
pSym2->setLineWidth(1.2);
//设置图层绘制器
QgsSingleSymbolRenderer *mypRenderer2 = new QgsSingleSymbolRenderer(pLayer2->geometryType());
mypRenderer2->addSymbol(pSym2);
pLayer2->setRenderer(mypRenderer2);
设置绘制面板的背景颜色:
pMapCanvas->setCanvasColor(QColor(155,176,227));
显示结果:
![](https://img-my.csdn.net/uploads/201303/11/1362991350_4708.jpg)