QGIS API Documentation  3.8.0-Zanzibar (11aff65)
qgspointdisplacementrendererwidget.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgspointdisplacementrendererwidget.cpp
3  --------------------------------------
4  begin : January 26, 2010
5  copyright : (C) 2010 by Marco Hugentobler
6  email : marco at hugis dot net
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
20 #include "qgsrendererregistry.h"
21 #include "qgsfields.h"
22 #include "qgsstyle.h"
24 #include "qgssymbollayerutils.h"
25 #include "qgsvectorlayer.h"
26 #include "qgsguiutils.h"
27 #include "qgsapplication.h"
28 
30 {
31  return new QgsPointDisplacementRendererWidget( layer, style, renderer );
32 }
33 
35  : QgsRendererWidget( layer, style )
36 
37 {
38  if ( !layer )
39  {
40  return;
41  }
42 
43  //the renderer only applies to point vector layers
45  {
46  //setup blank dialog
47  mRenderer = nullptr;
48  setupBlankUi( layer->name() );
49  return;
50  }
51  setupUi( this );
52  connect( mLabelFieldComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsPointDisplacementRendererWidget::mLabelFieldComboBox_currentIndexChanged );
53  connect( mRendererComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPointDisplacementRendererWidget::mRendererComboBox_currentIndexChanged );
54  connect( mPlacementComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPointDisplacementRendererWidget::mPlacementComboBox_currentIndexChanged );
55  connect( mCircleWidthSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsPointDisplacementRendererWidget::mCircleWidthSpinBox_valueChanged );
56  connect( mCircleColorButton, &QgsColorButton::colorChanged, this, &QgsPointDisplacementRendererWidget::mCircleColorButton_colorChanged );
57  connect( mDistanceSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsPointDisplacementRendererWidget::mDistanceSpinBox_valueChanged );
58  connect( mDistanceUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsPointDisplacementRendererWidget::mDistanceUnitWidget_changed );
59  connect( mLabelColorButton, &QgsColorButton::colorChanged, this, &QgsPointDisplacementRendererWidget::mLabelColorButton_colorChanged );
60  connect( mCircleModificationSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsPointDisplacementRendererWidget::mCircleModificationSpinBox_valueChanged );
61  connect( mLabelDistanceFactorSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsPointDisplacementRendererWidget::mLabelDistanceFactorSpinBox_valueChanged );
62  connect( mScaleDependentLabelsCheckBox, &QCheckBox::stateChanged, this, &QgsPointDisplacementRendererWidget::mScaleDependentLabelsCheckBox_stateChanged );
63  connect( mRendererSettingsButton, &QPushButton::clicked, this, &QgsPointDisplacementRendererWidget::mRendererSettingsButton_clicked );
64  this->layout()->setContentsMargins( 0, 0, 0, 0 );
65 
66  mLabelFontButton->setMode( QgsFontButton::ModeQFont );
69  mCenterSymbolToolButton->setSymbolType( QgsSymbol::Marker );
70 
71  if ( renderer )
72  {
74  }
75  if ( !mRenderer )
76  {
77  mRenderer = new QgsPointDisplacementRenderer();
78  }
79 
80  blockAllSignals( true );
81 
82  mPlacementComboBox->addItem( tr( "Ring" ), QgsPointDisplacementRenderer::Ring );
83  mPlacementComboBox->addItem( tr( "Concentric rings" ), QgsPointDisplacementRenderer::ConcentricRings );
84  mPlacementComboBox->addItem( tr( "Grid" ), QgsPointDisplacementRenderer::Grid );
85 
86  //insert attributes into combo box
87  if ( layer )
88  {
89  const QgsFields layerFields = layer->fields();
90  for ( const QgsField &f : layerFields )
91  {
92  mLabelFieldComboBox->addItem( f.name() );
93  }
94  mLabelFieldComboBox->addItem( tr( "None" ) );
95 
96  QString currentLabelAttribute = mRenderer->labelAttributeName();
97  if ( !currentLabelAttribute.isEmpty() )
98  {
99  mLabelFieldComboBox->setCurrentIndex( mLabelFieldComboBox->findText( currentLabelAttribute ) );
100  }
101  else
102  {
103  mLabelFieldComboBox->setCurrentIndex( mLabelFieldComboBox->findText( tr( "None" ) ) );
104  }
105  }
106 
107  //insert possible renderer types
109  QStringList::const_iterator it = rendererList.constBegin();
110  for ( ; it != rendererList.constEnd(); ++it )
111  {
112  if ( *it != QLatin1String( "pointDisplacement" ) && *it != QLatin1String( "pointCluster" ) && *it != QLatin1String( "heatmapRenderer" ) )
113  {
115  mRendererComboBox->addItem( m->icon(), m->visibleName(), *it );
116  }
117  }
118 
119  mCircleColorButton->setColorDialogTitle( tr( "Select Color" ) );
120  mCircleColorButton->setContext( QStringLiteral( "symbology" ) );
121  mCircleColorButton->setAllowOpacity( true );
122  mCircleColorButton->setShowNoColor( true );
123  mCircleColorButton->setNoColorString( tr( "Transparent Stroke" ) );
124  mLabelColorButton->setContext( QStringLiteral( "symbology" ) );
125  mLabelColorButton->setColorDialogTitle( tr( "Select Color" ) );
126  mLabelColorButton->setAllowOpacity( true );
127 
128  mCircleWidthSpinBox->setValue( mRenderer->circleWidth() );
129  mCircleColorButton->setColor( mRenderer->circleColor() );
130  mLabelColorButton->setColor( mRenderer->labelColor() );
131  mLabelFontButton->setCurrentFont( mRenderer->labelFont() );
132  mCircleModificationSpinBox->setClearValue( 0.0 );
133  mCircleModificationSpinBox->setValue( mRenderer->circleRadiusAddition() );
134  mLabelDistanceFactorSpinBox->setClearValue( 0.5 );
135  mLabelDistanceFactorSpinBox->setValue( mRenderer->labelDistanceFactor() );
136  mDistanceSpinBox->setValue( mRenderer->tolerance() );
137  mDistanceUnitWidget->setUnit( mRenderer->toleranceUnit() );
138  mDistanceUnitWidget->setMapUnitScale( mRenderer->toleranceMapUnitScale() );
139  mCenterSymbolToolButton->setSymbol( mRenderer->centerSymbol()->clone() );
140 
141  mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( mRenderer->placement() ) );
142 
143  //scale dependent labeling
144  mMinLabelScaleWidget->setScale( std::max( mRenderer->minimumLabelScale(), 0.0 ) );
145  if ( mRenderer->minimumLabelScale() > 0 )
146  {
147  mScaleDependentLabelsCheckBox->setCheckState( Qt::Checked );
148  }
149  else
150  {
151  mScaleDependentLabelsCheckBox->setCheckState( Qt::Unchecked );
152  mMinLabelScaleWidget->setEnabled( false );
153  }
154 
155 
156  blockAllSignals( false );
157 
158  //set the appropriate renderer dialog
159  if ( mRenderer->embeddedRenderer() )
160  {
161  QString rendererName = mRenderer->embeddedRenderer()->type();
162  int rendererIndex = mRendererComboBox->findData( rendererName );
163  if ( rendererIndex != -1 )
164  {
165  mRendererComboBox->setCurrentIndex( rendererIndex );
166  mRendererComboBox_currentIndexChanged( rendererIndex );
167  }
168  }
169 
170  connect( mMinLabelScaleWidget, &QgsScaleWidget::scaleChanged, this, &QgsPointDisplacementRendererWidget::minLabelScaleChanged );
171  connect( mLabelFontButton, &QgsFontButton::changed, this, &QgsPointDisplacementRendererWidget::labelFontChanged );
172  connect( mCenterSymbolToolButton, &QgsSymbolButton::changed, this, &QgsPointDisplacementRendererWidget::centerSymbolChanged );
173  mCenterSymbolToolButton->setDialogTitle( tr( "Center symbol" ) );
174  mCenterSymbolToolButton->setLayer( mLayer );
175  mCenterSymbolToolButton->registerExpressionContextGenerator( this );
176 }
177 
179 {
180  delete mRenderer;
181 }
182 
184 {
185  return mRenderer;
186 }
187 
189 {
191  if ( mDistanceUnitWidget )
192  mDistanceUnitWidget->setMapCanvas( context.mapCanvas() );
193  if ( mMinLabelScaleWidget )
194  {
195  mMinLabelScaleWidget->setMapCanvas( context.mapCanvas() );
196  mMinLabelScaleWidget->setShowCurrentScaleButton( true );
197  }
198  if ( mCenterSymbolToolButton )
199  {
200  mCenterSymbolToolButton->setMapCanvas( context.mapCanvas() );
201  mCenterSymbolToolButton->setMessageBar( context.messageBar() );
202  }
203 }
204 
206 {
208  if ( mContext.expressionContext() )
209  context = *mContext.expressionContext();
210  else
215  QList< QgsExpressionContextScope > scopes = mContext.additionalExpressionContextScopes();
216  scopes << scope;
217  const auto constScopes = scopes;
218  for ( const QgsExpressionContextScope &s : constScopes )
219  {
220  context << new QgsExpressionContextScope( s );
221  }
222  return context;
223 }
224 
225 void QgsPointDisplacementRendererWidget::mLabelFieldComboBox_currentIndexChanged( const QString &text )
226 {
227  if ( mRenderer )
228  {
229  if ( text == tr( "None" ) )
230  {
231  mRenderer->setLabelAttributeName( QString() );
232  }
233  else
234  {
235  mRenderer->setLabelAttributeName( text );
236  }
237  emit widgetChanged();
238  }
239 }
240 
241 void QgsPointDisplacementRendererWidget::mRendererComboBox_currentIndexChanged( int index )
242 {
243  QString rendererId = mRendererComboBox->itemData( index ).toString();
245  if ( m )
246  {
247  // unfortunately renderer conversion is only available through the creation of a widget...
248  QgsRendererWidget *tempRenderWidget = m->createRendererWidget( mLayer, mStyle, mRenderer->embeddedRenderer()->clone() );
249  mRenderer->setEmbeddedRenderer( tempRenderWidget->renderer()->clone() );
250  delete tempRenderWidget;
251  emit widgetChanged();
252  }
253 }
254 
255 void QgsPointDisplacementRendererWidget::mPlacementComboBox_currentIndexChanged( int index )
256 {
257  if ( !mRenderer )
258  return;
259 
260  mRenderer->setPlacement( ( QgsPointDisplacementRenderer::Placement )mPlacementComboBox->itemData( index ).toInt() );
261  emit widgetChanged();
262 }
263 
264 void QgsPointDisplacementRendererWidget::mRendererSettingsButton_clicked()
265 {
266  if ( !mRenderer )
267  return;
268 
270  if ( m )
271  {
273  w->setPanelTitle( tr( "Renderer Settings" ) );
274 
276 
280  QList< QgsExpressionContextScope > scopes = context.additionalExpressionContextScopes();
281  scopes << scope;
282  context.setAdditionalExpressionContextScopes( scopes );
283  w->setContext( context );
284 
285  connect( w, &QgsPanelWidget::widgetChanged, this, &QgsPointDisplacementRendererWidget::updateRendererFromWidget );
286  openPanel( w );
287  }
288 }
289 
290 void QgsPointDisplacementRendererWidget::labelFontChanged()
291 {
292  if ( !mRenderer )
293  {
294  return;
295  }
296 
297  mRenderer->setLabelFont( mLabelFontButton->currentFont() );
298  emit widgetChanged();
299 }
300 
301 void QgsPointDisplacementRendererWidget::mCircleWidthSpinBox_valueChanged( double d )
302 {
303  if ( mRenderer )
304  {
305  mRenderer->setCircleWidth( d );
306  emit widgetChanged();
307  }
308 }
309 
310 void QgsPointDisplacementRendererWidget::mCircleColorButton_colorChanged( const QColor &newColor )
311 {
312  if ( !mRenderer )
313  {
314  return;
315  }
316 
317  mRenderer->setCircleColor( newColor );
318  emit widgetChanged();
319 }
320 
321 void QgsPointDisplacementRendererWidget::mLabelColorButton_colorChanged( const QColor &newColor )
322 {
323  if ( !mRenderer )
324  {
325  return;
326  }
327 
328  mRenderer->setLabelColor( newColor );
329  emit widgetChanged();
330 }
331 
332 void QgsPointDisplacementRendererWidget::mCircleModificationSpinBox_valueChanged( double d )
333 {
334  if ( !mRenderer )
335  {
336  return;
337  }
338 
339  mRenderer->setCircleRadiusAddition( d );
340  emit widgetChanged();
341 }
342 
343 void QgsPointDisplacementRendererWidget::mLabelDistanceFactorSpinBox_valueChanged( double d )
344 {
345  if ( !mRenderer )
346  {
347  return;
348  }
349 
350  mRenderer->setLabelDistanceFactor( d );
351  emit widgetChanged();
352 }
353 
354 void QgsPointDisplacementRendererWidget::mDistanceSpinBox_valueChanged( double d )
355 {
356  if ( mRenderer )
357  {
358  mRenderer->setTolerance( d );
359  emit widgetChanged();
360  }
361 }
362 
363 void QgsPointDisplacementRendererWidget::mDistanceUnitWidget_changed()
364 {
365  if ( mRenderer )
366  {
367  mRenderer->setToleranceUnit( mDistanceUnitWidget->unit() );
368  mRenderer->setToleranceMapUnitScale( mDistanceUnitWidget->getMapUnitScale() );
369  emit widgetChanged();
370  }
371 }
372 
373 void QgsPointDisplacementRendererWidget::mScaleDependentLabelsCheckBox_stateChanged( int state )
374 {
375  if ( state == Qt::Unchecked )
376  {
377  mMinLabelScaleWidget->setScale( 0 );
378  mMinLabelScaleWidget->setEnabled( false );
379  }
380  else
381  {
382  mMinLabelScaleWidget->setEnabled( true );
383  }
384 }
385 
386 void QgsPointDisplacementRendererWidget::minLabelScaleChanged( double scale )
387 {
388  if ( !mRenderer )
389  {
390  return;
391  }
392 
393  mRenderer->setMinimumLabelScale( scale );
394  emit widgetChanged();
395 }
396 
397 void QgsPointDisplacementRendererWidget::blockAllSignals( bool block )
398 {
399  mLabelFieldComboBox->blockSignals( block );
400  mLabelFontButton->blockSignals( block );
401  mCircleWidthSpinBox->blockSignals( block );
402  mCircleColorButton->blockSignals( block );
403  mRendererComboBox->blockSignals( block );
404  mLabelColorButton->blockSignals( block );
405  mCircleModificationSpinBox->blockSignals( block );
406  mLabelDistanceFactorSpinBox->blockSignals( block );
407  mScaleDependentLabelsCheckBox->blockSignals( block );
408  mMinLabelScaleWidget->blockSignals( block );
409  mCenterSymbolToolButton->blockSignals( block );
410  mDistanceSpinBox->blockSignals( block );
411  mDistanceUnitWidget->blockSignals( block );
412  mPlacementComboBox->blockSignals( block );
413 }
414 
415 void QgsPointDisplacementRendererWidget::centerSymbolChanged()
416 {
417  mRenderer->setCenterSymbol( mCenterSymbolToolButton->clonedSymbol< QgsMarkerSymbol >() );
418  emit widgetChanged();
419 }
420 
421 void QgsPointDisplacementRendererWidget::updateRendererFromWidget()
422 {
423  QgsRendererWidget *w = qobject_cast<QgsRendererWidget *>( sender() );
424  if ( !w )
425  return;
426 
427  mRenderer->setEmbeddedRenderer( w->renderer()->clone() );
428  emit widgetChanged();
429 }
430 
431 void QgsPointDisplacementRendererWidget::setupBlankUi( const QString &layerName )
432 {
433  QLabel *label = new QLabel( tr( "The point displacement renderer only applies to (single) point layers. \n'%1' is not a (single) point layer and cannot be displayed by the point displacement renderer." ).arg( layerName ), this );
434  QVBoxLayout *layout = new QVBoxLayout( this );
435  layout->setContentsMargins( 0, 0, 0, 0 );
436  layout->addWidget( label );
437 }
void openPanel(QgsPanelWidget *panel)
Open a panel or dialog depending on dock mode setting If dock mode is true this method will emit the ...
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
static const QString EXPR_CLUSTER_COLOR
Inbuilt variable name for cluster color variable.
Meters value as Map units.
Definition: qgsunittypes.h:120
Single variable definition for use within a QgsExpressionContextScope.
QList< QgsExpressionContextScope * > globalProjectAtlasMapLayerScopes(const QgsMapLayer *layer) const
Returns list of scopes: global, project, atlas, map, layer.
Placement
Placement methods for dispersing points.
Place points in a grid around group.
virtual QgsFeatureRenderer * renderer()=0
Returns pointer to the renderer (no transfer of ownership)
QgsMarkerSymbol * centerSymbol()
Returns the symbol for the center of a displacement group (but not ownership of the symbol)...
double minimumLabelScale() const
Returns the minimum map scale (i.e.
virtual void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the renderer widget is shown, e.g., the associated map canvas and expressio...
virtual QgsRendererWidget * createRendererWidget(QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *oldRenderer)
Returns new instance of settings widget for the renderer.
static bool isMultiType(Type type)
Returns true if the WKB type is a multi type.
Definition: qgswkbtypes.h:560
QgsSymbolWidgetContext context() const
Returns the context in which the renderer widget is shown, e.g., the associated map canvas and expres...
QgsWkbTypes::Type wkbType() const FINAL
Returns the WKBType or WKBUnknown in case of error.
Base class for renderer settings widgets.
void setLabelFont(const QFont &font)
Sets the font used for labeling points.
void setTolerance(double distance)
Sets the tolerance distance for grouping points.
QgsVectorLayer * mLayer
void setLabelColor(const QColor &color)
Sets the color to use for for labeling points.
void setToleranceMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the distance tolerance.
void setToleranceUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the tolerance distance.
void changed()
Emitted when the symbol&#39;s settings are changed.
double circleRadiusAddition() const
Returns the factor for increasing the ring size of displacement groups.
Container of fields for a vector layer.
Definition: qgsfields.h:42
QStringList renderersList(QgsRendererAbstractMetadata::LayerTypes layerTypes=QgsRendererAbstractMetadata::All) const
Returns a list of available renderers.
void scaleChanged(double scale)
Emitted when user has finished editing/selecting a new scale.
QString labelAttributeName() const
Returns the attribute name used for labeling points, or an empty string if no labeling will be done b...
void setCenterSymbol(QgsMarkerSymbol *symbol)
Sets the center symbol for a displacement group.
QList< QgsUnitTypes::RenderUnit > RenderUnitList
List of render units.
Definition: qgsunittypes.h:184
void addVariable(const QgsExpressionContextScope::StaticVariable &variable)
Adds a variable into the context scope.
QgsUnitTypes::RenderUnit toleranceUnit() const
Returns the units for the tolerance distance.
A marker symbol type, for rendering Point and MultiPoint geometries.
Definition: qgssymbol.h:766
QFont labelFont() const
Returns the font used for labeling points.
QString type() const
Definition: qgsrenderer.h:129
QgsFields fields() const FINAL
Returns the list of fields of this layer.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown...
Compatible with point layers.
double labelDistanceFactor() const
Returns the factor for label distance from the symbol.
void setCircleColor(const QColor &color)
Sets the color used for drawing the displacement group circle.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
static GeometryType geometryType(Type type)
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
Definition: qgswkbtypes.h:666
void setLabelAttributeName(const QString &name)
Sets the attribute name for labeling points.
QColor circleColor() const
Returns the color used for drawing the displacement group circle.
Place points in concentric rings around group.
QgsRendererAbstractMetadata * rendererMetadata(const QString &rendererName)
Returns the metadata for a specified renderer.
void changed()
Emitted when the widget&#39;s text format settings are changed.
void setPlacement(Placement placement)
Sets the placement method used for dispersing the points.
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:48
Single scope for storing variables and functions for use within a QgsExpressionContext.
void setAdditionalExpressionContextScopes(const QList< QgsExpressionContextScope > &scopes)
Sets a list of additional expression context scopes to show as available within the layer...
void setLabelDistanceFactor(double factor)
Sets a factor for increasing the label distances from the symbol.
void widgetChanged()
Emitted when the widget state changes.
double tolerance() const
Returns the tolerance distance for grouping points.
const QgsMapUnitScale & toleranceMapUnitScale() const
Returns the map unit scale object for the distance tolerance.
Place points in a single ring around group.
A renderer that automatically displaces points with the same geographic location. ...
void colorChanged(const QColor &color)
Emitted whenever a new color is set for the button.
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the widget.
Marker symbol.
Definition: qgssymbol.h:85
const QgsFeatureRenderer * embeddedRenderer() const override
Returns the current embedded renderer (subrenderer) for this feature renderer.
QgsExpressionContext * expressionContext() const
Returns the expression context used for the widget, if set.
QgsSymbolWidgetContext mContext
Context in which widget is shown.
Points (e.g., for font sizes)
Definition: qgsunittypes.h:117
void setMinimumLabelScale(double scale)
Sets the minimum map scale (i.e.
Stores metadata about one renderer class.
QgsMessageBar * messageBar() const
Returns the message bar associated with the widget.
static const QString EXPR_CLUSTER_SIZE
Inbuilt variable name for cluster size variable.
Configure font settings for use with QFont objects.
Definition: qgsfontbutton.h:57
QString name
Definition: qgsmaplayer.h:82
QgsFeatureRenderer * renderer() override
Returns pointer to the renderer (no transfer of ownership)
void appendScopes(const QList< QgsExpressionContextScope *> &scopes)
Appends a list of scopes to the end of the context.
void setContext(const QgsSymbolWidgetContext &context) override
Sets the context in which the renderer widget is shown, e.g., the associated map canvas and expressio...
Placement placement() const
Returns the placement method used for dispersing the points.
void setCircleRadiusAddition(double distance)
Sets a factor for increasing the ring size of displacement groups.
void setEmbeddedRenderer(QgsFeatureRenderer *r) override
Sets an embedded renderer (subrenderer) for this feature renderer.
Represents a vector layer which manages a vector based data sets.
static QgsRendererWidget * create(QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer)
static QgsPointDisplacementRenderer * convertFromRenderer(const QgsFeatureRenderer *renderer)
Creates a QgsPointDisplacementRenderer from an existing renderer.
void setPanelTitle(const QString &panelTitle)
Set the title of the panel when shown in the interface.
static QgsRendererRegistry * rendererRegistry()
Returns the application&#39;s renderer registry, used for managing vector layer renderers.
virtual QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
QgsMarkerSymbol * clone() const override
Returns a deep copy of this symbol.
Definition: qgssymbol.cpp:1641
void setCircleWidth(double width)
Sets the line width for the displacement group circle.
QColor labelColor() const
Returns the color used for for labeling points.
QList< QgsExpressionContextScope > additionalExpressionContextScopes() const
Returns the list of additional expression context scopes to show as available within the layer...
double circleWidth() const
Returns the line width for the displacement group circle in mm.
QgsPointDisplacementRendererWidget(QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer)