#include "progress.h" #include #include #include #include Progress::Progress(QString text, QWidget *parent) : QWidget(parent) , _label(new QLabel(text, this)) , _progress(new QProgressBar(this)) , _hidden(false) { auto *l = new QHBoxLayout(this); l->setMargin(0); setLayout(l); _progress->setRange(0, 100); _label->setMinimumHeight(16); _progress->setMinimumHeight(16); _label->show(); _progress->show(); l->addWidget(_label); l->addWidget(_progress); _label->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred)); _progress->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred)); } Progress::~Progress() { } void Progress::resizeEvent(QResizeEvent *event) { QWidget::resizeEvent(event); auto size = event->size(); int width = size.width() - 110; if (width < 120) { width = size.width(); _progress->hide(); } else if (_progress->value() != -1) { _progress->show(); } _label->setMinimumWidth(width); } void Progress::setProgress(int percent) { if (percent == -1) { if (!_hidden || _progress->isVisible()) { _hidden = true; _progress->hide(); } } else { _progress->setValue(percent); if (_hidden) { _hidden = false; if (_label->width() > 200) { _progress->show(); } } } } void Progress::setCaption(const QString &caption) { _label->setText(caption); }