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 <christian.kandeler@qt.io>
This commit is contained in:
Alessandro Portale
2019-12-21 22:58:24 +01:00
parent e34263853c
commit 25323be13d
3 changed files with 16 additions and 1 deletions

View File

@@ -45,7 +45,6 @@ InfoLabel::InfoLabel(const QString &text, InfoType type, QWidget *parent)
: ElidingLabel(text, parent) : ElidingLabel(text, parent)
{ {
setType(type); setType(type);
setMinimumHeight(iconSize);
} }
InfoLabel::InfoType InfoLabel::type() const InfoLabel::InfoType InfoLabel::type() const
@@ -70,6 +69,13 @@ void InfoLabel::setFilled(bool filled)
m_filled = 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) static Utils::Theme::Color fillColorForType(InfoLabel::InfoType type)
{ {
using namespace Utils; using namespace Utils;

View File

@@ -51,6 +51,7 @@ public:
void setType(InfoType type); void setType(InfoType type);
bool filled() const; bool filled() const;
void setFilled(bool filled); void setFilled(bool filled);
QSize minimumSizeHint() const override;
protected: protected:
void paintEvent(QPaintEvent *event) override; void paintEvent(QPaintEvent *event) override;

View File

@@ -24,6 +24,7 @@
****************************************************************************/ ****************************************************************************/
#include <QApplication> #include <QApplication>
#include <QFormLayout>
#include <QLayout> #include <QLayout>
#include <QMessageBox> #include <QMessageBox>
#include <QSettings> #include <QSettings>
@@ -94,6 +95,13 @@ int main(int argc, char *argv[])
stretching->setFilled(true); stretching->setFilled(true);
mainLayout->addWidget(stretching, 2); mainLayout->addWidget(stretching, 2);
auto formLayout = new QFormLayout;
auto multiLine = new Utils::InfoLabel("Multi line<br/>in<br/>QFormLayout");
multiLine->setElideMode(Qt::ElideNone);
multiLine->setFilled(true);
formLayout->addRow("Label:", multiLine);
mainLayout->addLayout(formLayout);
const QString lorem = const QString lorem =
"Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt " "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 " "ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation "