@@ -52,6 +52,13 @@ QgsLayoutItemLegend::QgsLayoutItemLegend( QgsLayout *layout )
52
52
53
53
mTitle = mSettings .title ();
54
54
55
+ connect ( mLegendModel .get (), &QgsLayerTreeModel::hitTestStarted, this , [ = ] { emit backgroundTaskCountChanged ( 1 ); } );
56
+ connect ( mLegendModel .get (), &QgsLayerTreeModel::hitTestCompleted, this , [ = ]
57
+ {
58
+ adjustBoxSize ();
59
+ emit backgroundTaskCountChanged ( 0 );
60
+ } );
61
+
55
62
// Connect to the main layertreeroot.
56
63
// It serves in "auto update mode" as a medium between the main app legend and this one
57
64
connect ( mLayout ->project ()->layerTreeRoot (), &QgsLayerTreeNode::customPropertyChanged, this , &QgsLayoutItemLegend::nodeCustomPropertyChanged );
@@ -106,6 +113,14 @@ void QgsLayoutItemLegend::paint( QPainter *painter, const QStyleOptionGraphicsIt
106
113
doUpdateFilterByMap ();
107
114
}
108
115
116
+ if ( mLayout )
117
+ {
118
+ if ( !mLayout ->renderContext ().isPreviewRender () && mLegendModel ->hitTestInProgress () )
119
+ {
120
+ mLegendModel ->waitForHitTestBlocking ();
121
+ }
122
+ }
123
+
109
124
const int dpi = painter->device ()->logicalDpiX ();
110
125
const double dotsPerMM = dpi / 25.4 ;
111
126
@@ -1270,6 +1285,11 @@ bool QgsLayoutItemLegend::accept( QgsStyleEntityVisitorInterface *visitor ) cons
1270
1285
return visit ( mLegendModel ->rootGroup ( ) );
1271
1286
}
1272
1287
1288
+ bool QgsLayoutItemLegend::isRefreshing () const
1289
+ {
1290
+ return mLegendModel ->hitTestInProgress ();
1291
+ }
1292
+
1273
1293
1274
1294
// -------------------------------------------------------------------------
1275
1295
@@ -1279,6 +1299,7 @@ QgsLegendModel::QgsLegendModel( QgsLayerTree *rootNode, QObject *parent, QgsLayo
1279
1299
{
1280
1300
setFlag ( QgsLayerTreeModel::AllowLegendChangeState, false );
1281
1301
setFlag ( QgsLayerTreeModel::AllowNodeReorder, true );
1302
+ setFlag ( QgsLayerTreeModel::UseThreadedHitTest, true );
1282
1303
connect ( this , &QgsLegendModel::dataChanged, this , &QgsLegendModel::refreshLegend );
1283
1304
}
1284
1305
@@ -1288,6 +1309,7 @@ QgsLegendModel::QgsLegendModel( QgsLayerTree *rootNode, QgsLayoutItemLegend *la
1288
1309
{
1289
1310
setFlag ( QgsLayerTreeModel::AllowLegendChangeState, false );
1290
1311
setFlag ( QgsLayerTreeModel::AllowNodeReorder, true );
1312
+ setFlag ( QgsLayerTreeModel::UseThreadedHitTest, true );
1291
1313
connect ( this , &QgsLegendModel::dataChanged, this , &QgsLegendModel::refreshLegend );
1292
1314
}
1293
1315
0 commit comments