From ac3390de12120ae63ff646bd6e79923e47d721b6 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 12 Jun 2022 20:01:41 +0200 Subject: [PATCH] Gui: add function to determine size that a quantity spin box would need to display a certain text --- src/Gui/QuantitySpinBox.cpp | 17 +++++++++++++++++ src/Gui/QuantitySpinBox.h | 2 ++ 2 files changed, 19 insertions(+) diff --git a/src/Gui/QuantitySpinBox.cpp b/src/Gui/QuantitySpinBox.cpp index 5cd606d9b5..096b7d4b01 100644 --- a/src/Gui/QuantitySpinBox.cpp +++ b/src/Gui/QuantitySpinBox.cpp @@ -785,6 +785,23 @@ void QuantitySpinBox::stepBy(int steps) selectNumber(); } +QSize QuantitySpinBox::sizeForText(const QString& txt) const +{ + const QFontMetrics fm(fontMetrics()); + int h = lineEdit()->sizeHint().height(); + int w = QtTools::horizontalAdvance(fm, txt); + + w += 2; // cursor blinking space + w += iconHeight; + + QStyleOptionSpinBox opt; + initStyleOption(&opt); + QSize hint(w, h); + QSize size = style()->sizeFromContents(QStyle::CT_SpinBox, &opt, hint, this) + .expandedTo(QApplication::globalStrut()); + return size; +} + QSize QuantitySpinBox::sizeHint() const { Q_D(const QuantitySpinBox); diff --git a/src/Gui/QuantitySpinBox.h b/src/Gui/QuantitySpinBox.h index 8bbd96ca5b..8cdd06eaea 100644 --- a/src/Gui/QuantitySpinBox.h +++ b/src/Gui/QuantitySpinBox.h @@ -121,6 +121,8 @@ public: virtual QValidator::State validate(QString &input, int &pos) const; virtual void fixup(QString &str) const; + /// This is a helper function to determine the size this widget requires to fully display the text + QSize sizeForText(const QString&) const; QSize sizeHint() const; QSize minimumSizeHint() const; bool event(QEvent *event);