21   : 
QgsTask( tr( 
"Counting features in %1" ).arg( layer->name() ), 
QgsTask::CanCancel )
    23   , mRenderer( layer->renderer()->clone() )
    24   , mExpressionContext( context )
    25   , mWithFids( storeSymbolFids )
    26   , mFeatureCount( layer->featureCount() )
    36   mSymbolFeatureCountMap.clear();
    37   mSymbolFeatureIdMap.clear();
    39   QgsLegendSymbolList::const_iterator symbolIt = symbolList.constBegin();
    41   for ( ; symbolIt != symbolList.constEnd(); ++symbolIt )
    43     mSymbolFeatureCountMap.insert( symbolIt->label(), 0 );
    45       mSymbolFeatureIdMap.insert( symbolIt->label(), 
QgsFeatureIds() );
    49   if ( mFeatureCount > 0 )
    51     int featuresCounted = 0;
    59     if ( !mRenderer->filterNeedsGeometry() )
    67     mRenderer->startRender( renderContext, mSource->fields() );
    75       const QSet<QString> featureKeyList = mRenderer->legendKeysForFeature( f, renderContext );
    76       for ( 
const QString &key : featureKeyList )
    78         mSymbolFeatureCountMap[key] += 1;
    80           mSymbolFeatureIdMap[key].insert( f.
id() );
    84       double p = ( 
static_cast< double >( featuresCounted ) / mFeatureCount ) * 100;
    85       if ( p - progress > 1 )
    93         mRenderer->stopRender( renderContext );
    97     mRenderer->stopRender( renderContext );
   106   return mSymbolFeatureCountMap;
   111   return mSymbolFeatureCountMap.value( legendKey, -1 );
   116   return mSymbolFeatureIdMap;
   121   return mSymbolFeatureIdMap.value( symbolkey, 
QgsFeatureIds() );
 
Wrapper for iterator of features from vector data provider or vector layer. 
 
void setProgress(double progress)
Sets the task's current progress. 
 
QSet< QgsFeatureId > QgsFeatureIds
 
QList< QgsLegendSymbolItem > QgsLegendSymbolList
 
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context. 
 
bool run() override
Calculates the feature count and Ids per symbol. 
 
void setRendererScale(double scale)
Sets the renderer map scale. 
 
QgsFeatureRequest & setSubsetOfAttributes(const QgsAttributeList &attrs)
Set a subset of attributes that will be fetched. 
 
bool isCanceled() const
Will return true if task should terminate ASAP. 
 
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
 
QgsVectorLayerFeatureCounter(QgsVectorLayer *layer, const QgsExpressionContext &context=QgsExpressionContext(), bool storeSymbolFids=false)
Create a new feature counter for layer. 
 
void symbolsCounted()
Emitted when the symbols have been counted. 
 
long featureCount(const QString &legendKey) const
Returns the feature count for a particular legendKey. 
 
int scopeCount() const
Returns the number of scopes contained in the context. 
 
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
 
Abstract base class for long running background tasks. 
 
This class wraps a request for features to a vector layer (or directly its vector data provider)...
 
QgsExpressionContext createExpressionContext() const FINAL
This method needs to be reimplemented in all classes which implement this interface and return an exp...
 
QHash< QString, QgsFeatureIds > symbolFeatureIdMap() const
Returns the QgsFeatureIds for each symbol. 
 
Partial snapshot of vector layer's state (only the members necessary for access to features) ...
 
QgsExpressionContext & expressionContext()
Gets the expression context. 
 
Contains information about the context of a rendering operation. 
 
double progress() const
Returns the task's progress (between 0.0 and 100.0) 
 
QHash< QString, long > symbolFeatureCountMap() const
Returns the count for each symbol. 
 
QgsFeatureIds featureIds(const QString &symbolkey) const
Returns the feature Ids for a particular legendKey. 
 
bool nextFeature(QgsFeature &f)
 
Geometry is not required. It may still be returned if e.g. required for a filter condition. 
 
Represents a vector layer which manages a vector based data sets. 
 
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context. 
 
QgsFeatureRequest & setFlags(QgsFeatureRequest::Flags flags)
Sets flags that affect how features will be fetched.