QGis 加载的图层包括矢量图层和栅格图层,矢量图层中通常有点、线、面三种常用的图层。加载后的图层显示的风格各异,但是我们可以对他们的不同的风格进行设置使其看起来很好看。
看一下设置的效果:
点图层
线图层
面图层
1.点图层设置关键代码:
获取点图层的各种属性:
QgsSingleSymbolRendererV2* render = (QgsSingleSymbolRendererV2*)pointVectorLayer->rendererV2();
QgsMarkerSymbolV2* markSym = (QgsMarkerSymbolV2*)render->symbol();
QgsSymbolLayerV2List symList = markSym->symbolLayers();
QgsSvgMarkerSymbolLayerV2* svgMarker = (QgsSvgMarkerSymbolLayerV2*)symList.at(0);
svgPath = svgMarker->path();//SVG路径
double size = svgMarker->size();//SVG大小
double minScale = pointVectorLayer->minimumScale();//最小显示比例
double maxScale = pointVectorLayer->maximumScale();//最大显示比例
QgsPalLayerSettings layerSetting = QgsPalLayerSettings::fromLayer(pointVectorLayer);
bool bShowLabel = layerSetting.enabled;//是否显示标签
fontColor = layerSetting.textColor;//字体颜色
int fontSize = layerSetting.textFont.pointSize();//字体大小
bool bBufferShow = layerSetting.bufferDraw;//轮廓显示
bufColor = layerSetting.bufferColor;//轮廓颜色
bool bShadowShow = layerSetting.shadowDraw;//阴影显示
int shadowAngle = layerSetting.shadowOffsetAngle;//阴影角度
int shadowDis = layerSetting.shadowOffsetDist;//阴影距离
设置点图层的属性:
//SVG
QgsSvgMarkerSymbolLayerV2* svgMarker = new QgsSvgMarkerSymbolLayerV2(svgPath);
QgsSymbolLayerV2List symList;
symList.append(svgMarker);
QgsMarkerSymbolV2* markSym = new QgsMarkerSymbolV2(symList);
QgsSingleSymbolRendererV2* symRenderer = new QgsSingleSymbolRendererV2(markSym);
pointVectorLayer->setRendererV2(symRenderer);
svgMarker->setSize(svgSize); //设置svg大小
//设置标注
QgsPalLayerSettings layerSetting;
layerSetting.enabled = bShowLable;//显示标注
layerSetting.fieldName = pointVectorLayer->pendingFields()[1].name();
layerSetting.centroidWhole = true; //设置位置参考的中心点
//设置字体
layerSetting.textColor = fontColor;
QFont font("Times", fontSize);
font.setBold(true);
layerSetting.textFont = font;
//设置轮廓
layerSetting.bufferDraw = bShowBuf;
layerSetting.bufferColor = bufColor;
layerSetting.bufferSize = 1;
layerSetting.bufferTransp = 0.5;
//设置阴影
layerSetting.shadowDraw = bShowShadow;
layerSetting.shadowOffsetAngle = shadowAngle;
layerSetting.shadowOffsetDist = shadowDis;
layerSetting.writeToLayer(pointVectorLayer);
DrawManager::getInstance()->getMainCanvas()->refresh();
2.线图层的关键代码:
获取线图层的各种属性:
QgsSingleSymbolRendererV2* symRenderer = (QgsSingleSymbolRendererV2*)(lineVectorLayer->rendererV2());
QgsLineSymbolV2* lineSymbol = (QgsLineSymbolV2*)symRenderer->symbol();
lineColor = lineSymbol->color();//线颜色
double lineWidth = lineSymbol->width();//线宽
设置线图层的各种属性:
QgsSingleSymbolRendererV2* symRenderer = (QgsSingleSymbolRendererV2*)(lineVectorLayer->rendererV2());
QgsLineSymbolV2* lineSymbol = (QgsLineSymbolV2*)symRenderer->symbol();
lineSymbol->setColor(lineColor);
lineSymbol->setWidth(lineWidth);
DrawManager::getInstance()->getMainCanvas()->refresh();
3.面图层的关键代码:
获取面图层的属性:
QgsSingleSymbolRendererV2* symRenderer = (QgsSingleSymbolRendererV2*)(polygonVectorLayer->rendererV2());
QgsFillSymbolV2* fillSymbol = (QgsFillSymbolV2*)symRenderer->symbol();
fillColor = fillSymbol->color();//填充颜色
double alpha = fillSymbol->alpha();//透明度
设置面图层的属性:
QgsSingleSymbolRendererV2* symRenderer = (QgsSingleSymbolRendererV2*)(polygonVectorLayer->rendererV2());
QgsFillSymbolV2* fillSymbol = (QgsFillSymbolV2*)symRenderer->symbol();
fillSymbol->setColor(fillColor);
fillSymbol->setAlpha((double)alpha/100);