diff --git a/src/gui/attributetable/qgsfeaturelistmodel.cpp b/src/gui/attributetable/qgsfeaturelistmodel.cpp index 8aa9c7e8fca..f3f93e95c2b 100644 --- a/src/gui/attributetable/qgsfeaturelistmodel.cpp +++ b/src/gui/attributetable/qgsfeaturelistmodel.cpp @@ -31,10 +31,15 @@ QgsFeatureListModel::QgsFeatureListModel( QgsAttributeTableFilterModel *sourceMo void QgsFeatureListModel::setSourceModel( QgsAttributeTableFilterModel *sourceModel ) { + if ( mSourceLayer ) + disconnect( mSourceLayer->conditionalStyles(), &QgsConditionalLayerStyles::changed, this, &QgsFeatureListModel::conditionalStylesChanged ); + QSortFilterProxyModel::setSourceModel( sourceModel ); mExpressionContext = sourceModel->layer()->createExpressionContext(); mFilterModel = sourceModel; + mSourceLayer = sourceModel->layer(); + connect( mSourceLayer->conditionalStyles(), &QgsConditionalLayerStyles::changed, this, &QgsFeatureListModel::conditionalStylesChanged ); } QgsVectorLayerCache *QgsFeatureListModel::layerCache() @@ -265,6 +270,12 @@ void QgsFeatureListModel::onEndInsertRows( const QModelIndex &parent, int first, endInsertRows(); } +void QgsFeatureListModel::conditionalStylesChanged() +{ + mRowStylesMap.clear(); + emit dataChanged( index( 0, 0 ), index( rowCount() - 1, columnCount() - 1 ) ); +} + bool QgsFeatureListModel::sortByDisplayExpression() const { return mSortByDisplayExpression; diff --git a/src/gui/attributetable/qgsfeaturelistmodel.h b/src/gui/attributetable/qgsfeaturelistmodel.h index 89dbb2c0f7b..f885c7b4fee 100644 --- a/src/gui/attributetable/qgsfeaturelistmodel.h +++ b/src/gui/attributetable/qgsfeaturelistmodel.h @@ -185,6 +185,10 @@ class GUI_EXPORT QgsFeatureListModel : public QSortFilterProxyModel, public QgsF */ Q_DECL_DEPRECATED void onEndInsertRows( const QModelIndex &parent, int first, int last ); + private slots: + + void conditionalStylesChanged(); + private: mutable QgsExpression mDisplayExpression; QgsAttributeTableFilterModel *mFilterModel = nullptr; @@ -193,6 +197,7 @@ class GUI_EXPORT QgsFeatureListModel : public QSortFilterProxyModel, public QgsF mutable QgsExpressionContext mExpressionContext; mutable QMap< QgsFeatureId, QList > mRowStylesMap; bool mSortByDisplayExpression = false; + QPointer< QgsVectorLayer > mSourceLayer; }; Q_DECLARE_METATYPE( QgsFeatureListModel::FeatureInfo )