QgsLayerTreeView class

The QgsLayerTreeView class extends QTreeView and provides some additional functionality when working with a layer tree.

The view updates expanded state of layer tree nodes and also listens to changes to expanded states in the layer tree.

The view keeps track of the current layer and emits a signal when the current layer has changed.

Allows the client to specify a context menu provider with custom actions. Also it comes with a set of default actions that can be used when building context menu.

Constructors, destructors, conversion operators

QgsLayerTreeView(QWidget* parent = nullptr) explicit
Constructor for QgsLayerTreeView.

Public functions

void addIndicator(QgsLayerTreeNode* node, QgsLayerTreeViewIndicator* indicator)
Adds an indicator to the given layer tree node.
auto currentGroupNode() const -> QgsLayerTreeGroup*
Gets current group node. If a layer is current node, the function will return parent group. May be null.
auto currentLayer() const -> QgsMapLayer*
Gets currently selected layer. May be null.
auto currentLegendNode() const -> QgsLayerTreeModelLegendNode*
Gets current legend node.
auto currentNode() const -> QgsLayerTreeNode*
Gets current node. May be null.
auto defaultActions() -> QgsLayerTreeViewDefaultActions*
Gets access to the default actions that may be used with the tree view.
auto indicators(QgsLayerTreeNode* node) const -> QList<QgsLayerTreeViewIndicator*>
Returns list of indicators associated with a particular layer tree node.
auto layerTreeModel() const -> QgsLayerTreeModel*
Gets access to the model casted to QgsLayerTreeModel.
auto menuProvider() const -> QgsLayerTreeViewMenuProvider*
Returns pointer to the context menu provider. May be null.
void removeIndicator(QgsLayerTreeNode* node, QgsLayerTreeViewIndicator* indicator)
Removes a previously added indicator to a layer tree node.
auto selectedLayerNodes() const -> QList<QgsLayerTreeLayer*>
Returns list of selected nodes filtered to just layer nodes.
auto selectedLayers() const -> QList<QgsMapLayer*>
Gets list of selected layers.
auto selectedLayersRecursive() const -> QList<QgsMapLayer*>
Gets list of selected layers, including those that are not directly selected, but their ancestor groups is selected.
auto selectedNodes(bool skipInternal = false) const -> QList<QgsLayerTreeNode*>
Returns list of selected nodes.
void setCurrentLayer(QgsMapLayer* layer)
Sets currently selected layer. Null pointer will deselect any layer.
void setMenuProvider(QgsLayerTreeViewMenuProvider* menuProvider)
Sets provider for context menu. Takes ownership of the instance.
void setModel(QAbstractItemModel* model) override
Overridden setModel() from base class. Only QgsLayerTreeModel is an acceptable model.

Signals

void currentLayerChanged(QgsMapLayer* layer)
Emitted when a current layer is changed.

Public slots

void collapseAllNodes()
Enhancement of QTreeView::collapseAll() that also records expanded state in layer tree nodes.
void expandAllNodes()
Enhancement of QTreeView::expandAll() that also records expanded state in layer tree nodes.
void refreshLayerSymbology(const QString& layerId)
Force refresh of layer symbology. Normally not needed as the changes of layer's renderer are monitored by the model.

Protected variables

QString mCurrentLayerID
Keeps track of current layer ID (to check when to emit signal about change of current layer)
QgsLayerTreeViewDefaultActions* mDefaultActions
helper class with default actions. Lazily initialized.
QHash<QgsLayerTreeNode*, QList<QgsLayerTreeViewIndicator*>> mIndicators
Storage of indicators used with the tree view.
QPoint mLastReleaseMousePos
Used by the item delegate for identification of which indicator has been clicked.
QgsLayerTreeViewMenuProvider* mMenuProvider
Context menu provider. Owned by the view.

Function documentation

void QgsLayerTreeView::addIndicator(QgsLayerTreeNode* node, QgsLayerTreeViewIndicator* indicator)

Adds an indicator to the given layer tree node.

Indicators are icons shown next to layer/group names in the layer tree view. They can be used to show extra information with tree nodes and they allow user interaction.

Does not take ownership of the indicator. One indicator object may be used for multiple layer tree nodes.

QgsLayerTreeModelLegendNode* QgsLayerTreeView::currentLegendNode() const

Gets current legend node.

May be null if current node is not a legend node.

QList<QgsLayerTreeViewIndicator*> QgsLayerTreeView::indicators(QgsLayerTreeNode* node) const

Returns list of indicators associated with a particular layer tree node.

void QgsLayerTreeView::removeIndicator(QgsLayerTreeNode* node, QgsLayerTreeViewIndicator* indicator)

Removes a previously added indicator to a layer tree node.

Does not delete the indicator.

QList<QgsMapLayer*> QgsLayerTreeView::selectedLayersRecursive() const

Gets list of selected layers, including those that are not directly selected, but their ancestor groups is selected.

If we have a group with two layers L1, L2 and just the group node is selected, this method returns L1 and L2, while selectedLayers() returns an empty list.

QList<QgsLayerTreeNode*> QgsLayerTreeView::selectedNodes(bool skipInternal = false) const

Returns list of selected nodes.

Parameters
skipInternal If true, will ignore nodes which have an ancestor in the selection

void QgsLayerTreeView::collapseAllNodes() public slot

Enhancement of QTreeView::collapseAll() that also records expanded state in layer tree nodes.

void QgsLayerTreeView::expandAllNodes() public slot

Enhancement of QTreeView::expandAll() that also records expanded state in layer tree nodes.