Tal vez esta respuesta puede resolver tu pregunta.
Ejecutar este fragmento de código en el QGIS Consola de Python:
for layer in QgsMapLayerRegistry.instance().mapLayers().values(): # Iterate layers
if type(layer) == QgsVectorLayer and layer.hasGeometryType():
r = layer.rendererV2()
if r.type() == 'RuleRenderer':
for rule in r.rootRule().children(): # Iterate rules
if rule.filter(): # Filter out empty rules
request = QgsFeatureRequest( rule.filter() )
count = len( [f for f in layer.getFeatures( request )] )
print layer.name() + ' : ' + rule.label() + ' : ' + rule.filterExpression() + ' : ' + str(count)
El primer for
bucle itera capas, la segunda iteración de la capa de reglas. Primera if
cláusula asegura que utilice capas vectoriales, el segundo asegura que sólo utilice capas vectoriales con una regla basada en el estilo, y la última en los filtros de vacío reglas.
El resultado es una lista con los nombres de capa, la regla de las etiquetas, la regla de expresiones, y la correspondiente cuenta, como este:
my_point_layer : My Rule : "my_code" = '1': 6
my_point_layer : My 2nd Rule : "my_code" IS NULL : 0
my_polygon_layer : My Polygon Rule : "area" > 100 : 2
my_polygon_layer : My 2nd Polygon Rule : "area <= 100 : 28
Usted puede utilizar a la count
variable para filtrar sólo aquellos con 0 características, que era su propósito original.
Espero que esto aclare tu pregunta.