From 25323be13d64cff7f37f51b2c8788412851661fc Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Sat, 21 Dec 2019 22:58:24 +0100 Subject: [PATCH] Utils: Fix setting of minimal height of InfoLabels in QFormLayout Calling setMinimumHeight is not compatible with QFormLayout if the label has multiple lines. Overriding minimumSizeHint on the other hand is. Change-Id: Id2167b295620322cec75035d7cc7125cc3221c4d Reviewed-by: Christian Kandeler --- src/libs/utils/infolabel.cpp | 8 +++++++- src/libs/utils/infolabel.h | 1 + .../widgets/infolabel/tst_manual_widgets_infolabel.cpp | 8 ++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/infolabel.cpp b/src/libs/utils/infolabel.cpp index d5adb32e57c..7ae39148617 100644 --- a/src/libs/utils/infolabel.cpp +++ b/src/libs/utils/infolabel.cpp @@ -45,7 +45,6 @@ InfoLabel::InfoLabel(const QString &text, InfoType type, QWidget *parent) : ElidingLabel(text, parent) { setType(type); - setMinimumHeight(iconSize); } InfoLabel::InfoType InfoLabel::type() const @@ -70,6 +69,13 @@ void InfoLabel::setFilled(bool filled) m_filled = filled; } +QSize InfoLabel::minimumSizeHint() const +{ + QSize baseHint = ElidingLabel::minimumSizeHint(); + baseHint.setHeight(qMax(baseHint.height(), iconSize)); + return baseHint; +} + static Utils::Theme::Color fillColorForType(InfoLabel::InfoType type) { using namespace Utils; diff --git a/src/libs/utils/infolabel.h b/src/libs/utils/infolabel.h index 4718ca092c9..345d0459138 100644 --- a/src/libs/utils/infolabel.h +++ b/src/libs/utils/infolabel.h @@ -51,6 +51,7 @@ public: void setType(InfoType type); bool filled() const; void setFilled(bool filled); + QSize minimumSizeHint() const override; protected: void paintEvent(QPaintEvent *event) override; diff --git a/tests/manual/widgets/infolabel/tst_manual_widgets_infolabel.cpp b/tests/manual/widgets/infolabel/tst_manual_widgets_infolabel.cpp index 1b4a4061c31..47d5fa6bde2 100644 --- a/tests/manual/widgets/infolabel/tst_manual_widgets_infolabel.cpp +++ b/tests/manual/widgets/infolabel/tst_manual_widgets_infolabel.cpp @@ -24,6 +24,7 @@ ****************************************************************************/ #include +#include #include #include #include @@ -94,6 +95,13 @@ int main(int argc, char *argv[]) stretching->setFilled(true); mainLayout->addWidget(stretching, 2); + auto formLayout = new QFormLayout; + auto multiLine = new Utils::InfoLabel("Multi line
in
QFormLayout"); + multiLine->setElideMode(Qt::ElideNone); + multiLine->setFilled(true); + formLayout->addRow("Label:", multiLine); + mainLayout->addLayout(formLayout); + const QString lorem = "Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt " "ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation "