Utils: Don't store pointer to aspect label widget

Change-Id: Ieb8a04357fbdbc909fed79e33ef6a1d0cef2d721
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Marcus Tillmanns
2023-09-19 14:50:55 +02:00
parent ada5aacedb
commit 399c2f92d6
4 changed files with 25 additions and 27 deletions

View File

@@ -77,7 +77,6 @@ public:
QString m_labelText; QString m_labelText;
QPixmap m_labelPixmap; QPixmap m_labelPixmap;
QIcon m_icon; QIcon m_icon;
QPointer<QLabel> m_label; // Owned by configuration widget
QPointer<QAction> m_action; // Owned by us. QPointer<QAction> m_action; // Owned by us.
AspectContainer *m_container = nullptr; // Not owned by us. AspectContainer *m_container = nullptr; // Not owned by us.
@@ -225,26 +224,33 @@ void BaseAspect::setVisible(bool visible)
} }
} }
void BaseAspect::setupLabel() QLabel *BaseAspect::createLabel()
{ {
QTC_ASSERT(!d->m_label, delete d->m_label);
if (d->m_labelText.isEmpty() && d->m_labelPixmap.isNull()) if (d->m_labelText.isEmpty() && d->m_labelPixmap.isNull())
return; return nullptr;
d->m_label = new QLabel(d->m_labelText);
d->m_label->setTextInteractionFlags(d->m_label->textInteractionFlags() auto label = new QLabel(d->m_labelText);
| Qt::TextSelectableByMouse); label->setTextInteractionFlags(label->textInteractionFlags() | Qt::TextSelectableByMouse);
connect(d->m_label, &QLabel::linkActivated, this, [this](const QString &link) { connect(label, &QLabel::linkActivated, this, [this](const QString &link) {
emit labelLinkActivated(link); emit labelLinkActivated(link);
}); });
if (!d->m_labelPixmap.isNull()) if (!d->m_labelPixmap.isNull())
d->m_label->setPixmap(d->m_labelPixmap); label->setPixmap(d->m_labelPixmap);
registerSubWidget(d->m_label); registerSubWidget(label);
connect(this, &BaseAspect::labelTextChanged, label, [label, this] {
label->setText(d->m_labelText);
});
connect(this, &BaseAspect::labelPixmapChanged, label, [label, this] {
label->setPixmap(d->m_labelPixmap);
});
return label;
} }
void BaseAspect::addLabeledItem(LayoutItem &parent, QWidget *widget) void BaseAspect::addLabeledItem(LayoutItem &parent, QWidget *widget)
{ {
setupLabel(); if (QLabel *l = createLabel()) {
if (QLabel *l = label()) {
l->setBuddy(widget); l->setBuddy(widget);
parent.addItem(l); parent.addItem(l);
parent.addItem(Span(std::max(d->m_spanX - 1, 1), LayoutItem(widget))); parent.addItem(Span(std::max(d->m_spanX - 1, 1), LayoutItem(widget)));
@@ -260,8 +266,7 @@ void BaseAspect::addLabeledItem(LayoutItem &parent, QWidget *widget)
void BaseAspect::setLabelText(const QString &labelText) void BaseAspect::setLabelText(const QString &labelText)
{ {
d->m_labelText = labelText; d->m_labelText = labelText;
if (d->m_label) emit labelTextChanged();
d->m_label->setText(labelText);
} }
/*! /*!
@@ -271,8 +276,7 @@ void BaseAspect::setLabelText(const QString &labelText)
void BaseAspect::setLabelPixmap(const QPixmap &labelPixmap) void BaseAspect::setLabelPixmap(const QPixmap &labelPixmap)
{ {
d->m_labelPixmap = labelPixmap; d->m_labelPixmap = labelPixmap;
if (d->m_label) emit labelPixmapChanged();
d->m_label->setPixmap(labelPixmap);
} }
void BaseAspect::setIcon(const QIcon &icon) void BaseAspect::setIcon(const QIcon &icon)
@@ -291,11 +295,6 @@ QString BaseAspect::labelText() const
return d->m_labelText; return d->m_labelText;
} }
QLabel *BaseAspect::label() const
{
return d->m_label.data();
}
QString BaseAspect::toolTip() const QString BaseAspect::toolTip() const
{ {
return d->m_tooltip; return d->m_tooltip;

View File

@@ -207,6 +207,8 @@ signals:
void labelLinkActivated(const QString &link); void labelLinkActivated(const QString &link);
void checkedChanged(); void checkedChanged();
void enabledChanged(); void enabledChanged();
void labelTextChanged();
void labelPixmapChanged();
protected: protected:
virtual bool internalToBuffer(); virtual bool internalToBuffer();
@@ -216,8 +218,7 @@ protected:
virtual void handleGuiChanged(); virtual void handleGuiChanged();
QLabel *label() const; QLabel *createLabel();
void setupLabel();
void addLabeledItem(Layouting::LayoutItem &parent, QWidget *widget); void addLabeledItem(Layouting::LayoutItem &parent, QWidget *widget);
void setDataCreatorHelper(const DataCreator &creator) const; void setDataCreatorHelper(const DataCreator &creator) const;

View File

@@ -62,8 +62,7 @@ public:
Utils::Environment environment; Utils::Environment environment;
}; };
using Utils::BaseAspect::setupLabel; using Utils::BaseAspect::createLabel;
using Utils::BaseAspect::label;
signals: signals:
void baseEnvironmentChanged(); void baseEnvironmentChanged();

View File

@@ -37,8 +37,7 @@ EnvironmentAspectWidget::EnvironmentAspectWidget(EnvironmentAspect *aspect)
auto label = [aspect]() { auto label = [aspect]() {
if (aspect->labelText().isEmpty()) if (aspect->labelText().isEmpty())
aspect->setLabelText(Tr::tr("Base environment for this run configuration:")); aspect->setLabelText(Tr::tr("Base environment for this run configuration:"));
aspect->setupLabel(); return aspect->createLabel();
return aspect->label();
}; };
m_baseLayout->addWidget(label()); m_baseLayout->addWidget(label());