have text in progress bar elided if needed

This commit is contained in:
Martin Rotter 2021-10-21 08:56:03 +02:00
parent 206686d443
commit 03823ff2e3
2 changed files with 11 additions and 25 deletions

View File

@ -5,25 +5,7 @@
#include "definitions/definitions.h" #include "definitions/definitions.h"
#include "miscellaneous/application.h" #include "miscellaneous/application.h"
ProgressBarWithText::ProgressBarWithText(QWidget* parent) : QProgressBar(parent) { ProgressBarWithText::ProgressBarWithText(QWidget* parent) : QProgressBar(parent) {}
//setSizePolicy(QSizePolicy::Policy::Maximum, QSizePolicy::Policy::Preferred);
}
/*
QSize ProgressBarWithText::minimumSizeHint() const {
QString txt = text();
return QSize(fontMetrics().boundingRect(txt).width() + 32,
QProgressBar::minimumSizeHint().height());
}
QSize ProgressBarWithText::sizeHint() const {
QString txt = text();
return QSize(fontMetrics().boundingRect(txt).width() + 32,
QProgressBar::sizeHint().height());
}
*/
QString ProgressBarWithText::text() const { QString ProgressBarWithText::text() const {
qint64 total_steps = qint64(maximum()) - minimum(); qint64 total_steps = qint64(maximum()) - minimum();
@ -45,5 +27,14 @@ QString ProgressBarWithText::text() const {
const auto progress = static_cast<int>((qint64(value()) - minimum()) * 100.0 / total_steps); const auto progress = static_cast<int>((qint64(value()) - minimum()) * 100.0 / total_steps);
result.replace(QLatin1String("%p"), locale.toString(progress)); result.replace(QLatin1String("%p"), locale.toString(progress));
return result;
// Now, shorten the text to fit the widget.
bool elide = false;
while (fontMetrics().boundingRect(result + QSL("...")).width() > width() - 30) {
result.chop(1);
elide = true;
}
return elide ? result + QSL("...") : result;
} }

View File

@ -9,11 +9,6 @@ class ProgressBarWithText : public QProgressBar {
public: public:
explicit ProgressBarWithText(QWidget* parent = nullptr); explicit ProgressBarWithText(QWidget* parent = nullptr);
// NOTE: Can be uncommented (along with constructor code)
// to enable automatic fit-to-contents progress bars.
//virtual QSize minimumSizeHint() const;
//virtual QSize sizeHint() const;
virtual QString text() const; virtual QString text() const;
}; };