@@ -514,7 +514,7 @@ void QgsRuleBasedRendererV2Widget::countFeatures()
514514 countMap[rule].duplicateCount = 0 ;
515515 }
516516
517- QgsFeatureIterator fit = mLayer -> getFeatures ( QgsFeatureRequest ().setFlags ( QgsFeatureRequest::NoGeometry ) );
517+ QgsFeatureRequest req = QgsFeatureRequest ().setFilterExpression ( mRenderer -> filter ( mLayer -> fields () ) );
518518
519519 QgsRenderContext renderContext;
520520 renderContext.setRendererScale ( 0 ); // ignore scale
@@ -535,9 +535,13 @@ void QgsRuleBasedRendererV2Widget::countFeatures()
535535 context << QgsExpressionContextUtils::layerScope ( mLayer );
536536
537537 renderContext.setExpressionContext ( context );
538+ req.setExpressionContext ( context );
538539
539540 mRenderer ->startRender ( renderContext, mLayer ->fields () );
540541
542+ req.setSubsetOfAttributes ( mRenderer ->usedAttributes (), mLayer ->fields () );
543+ QgsFeatureIterator fit = mLayer ->getFeatures ( req );
544+
541545 int nFeatures = mLayer ->featureCount ();
542546 QProgressDialog p ( tr ( " Calculating feature count." ), tr ( " Abort" ), 0 , nFeatures );
543547 p.setWindowModality ( Qt::WindowModal );
@@ -762,19 +766,18 @@ void QgsRendererRulePropsWidget::testFilter()
762766
763767 QApplication::setOverrideCursor ( Qt::WaitCursor );
764768
765- QgsFeatureIterator fit = mLayer ->getFeatures ();
769+ QgsFeatureRequest req = QgsFeatureRequest ().setSubsetOfAttributes ( QgsAttributeList () )
770+ .setFlags ( QgsFeatureRequest::NoGeometry )
771+ .setFilterExpression ( editFilter->text () )
772+ .setExpressionContext ( context );
773+
774+ QgsFeatureIterator fit = mLayer ->getFeatures ( req );
766775
767776 int count = 0 ;
768777 QgsFeature f;
769778 while ( fit.nextFeature ( f ) )
770779 {
771- context.setFeature ( f );
772-
773- QVariant value = filter.evaluate ( &context );
774- if ( value.toInt () != 0 )
775- count++;
776- if ( filter.hasEvalError () )
777- break ;
780+ count++;
778781 }
779782
780783 QApplication::restoreOverrideCursor ();
0 commit comments