Fix that target selector accumulated labels again

It was previously fixed in  1a43983ea6

Since then, adding the aspect to grid adds a label itself, so the self-
created label in setKit is irrelevant (it adds some empty space), and
the labels that are created for the aspects are accumulated again.

Instead of trying to delete the labels, create a wrapping QWidget.
Deleting this widget gets rid of any widgets that might have been added
when creating the grid of mutable aspects.

Fixes: QTCREATORBUG-29990
Change-Id: I5f2aebf9a865e532c9e24a29ec5979b11d17d43a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Eike Ziller
2023-11-29 14:05:18 +01:00
parent c20129a973
commit 3b6dc15e04

View File

@@ -565,35 +565,34 @@ public:
: QWidget(parent) : QWidget(parent)
{ {
connect(KitManager::instance(), &KitManager::kitUpdated, this, &KitAreaWidget::updateKit); connect(KitManager::instance(), &KitManager::kitUpdated, this, &KitAreaWidget::updateKit);
auto layout = new QVBoxLayout;
layout->setContentsMargins({});
setLayout(layout);
} }
~KitAreaWidget() override { setKit(nullptr); } ~KitAreaWidget() override { setKit(nullptr); }
void setKit(Kit *k) void setKit(Kit *k)
{ {
qDeleteAll(m_labels);
m_labels.clear();
qDeleteAll(m_kitAspects); qDeleteAll(m_kitAspects);
m_kitAspects.clear(); m_kitAspects.clear();
delete m_gridWidget;
m_gridWidget = nullptr;
if (!k) if (!k)
return; return;
delete layout();
Layouting::Grid grid; Layouting::Grid grid;
for (KitAspectFactory *factory : KitManager::kitAspectFactories()) { for (KitAspectFactory *factory : KitManager::kitAspectFactories()) {
if (k && k->isMutable(factory->id())) { if (k && k->isMutable(factory->id())) {
KitAspect *aspect = factory->createKitAspect(k); KitAspect *aspect = factory->createKitAspect(k);
m_kitAspects << aspect; m_kitAspects << aspect;
auto label = new QLabel(aspect->displayName()); grid.addItems({aspect, Layouting::br});
m_labels << label;
grid.addItems({label, aspect, Layouting::br});
} }
} }
grid.attachTo(this); m_gridWidget = grid.emerge();
layout()->setContentsMargins(3, 3, 3, 3); m_gridWidget->layout()->setContentsMargins(3, 3, 3, 3);
layout()->addWidget(m_gridWidget);
m_kit = k; m_kit = k;
setHidden(m_kitAspects.isEmpty()); setHidden(m_kitAspects.isEmpty());
@@ -629,7 +628,7 @@ private:
} }
Kit *m_kit = nullptr; Kit *m_kit = nullptr;
QList<QWidget *> m_labels; QWidget *m_gridWidget = nullptr;
QList<KitAspect *> m_kitAspects; QList<KitAspect *> m_kitAspects;
}; };