Make progress bar a widget independent from QProgressBar.

Solves a problem with infinitely running QProgressBar animation in
QMacStyle.

Reviewed-by: Roberto Raggi
This commit is contained in:
con
2009-08-26 14:21:11 +02:00
parent ee16c21067
commit d30372db24
2 changed files with 40 additions and 3 deletions

View File

@@ -39,7 +39,7 @@
#define PROGRESSBAR_HEIGHT 11 #define PROGRESSBAR_HEIGHT 11
ProgressBar::ProgressBar(QWidget *parent) ProgressBar::ProgressBar(QWidget *parent)
: QProgressBar(parent), m_error(false) : QWidget(parent), m_error(false), m_minimum(1), m_maximum(100), m_value(1)
{ {
setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
setMouseTracking(true); setMouseTracking(true);
@@ -49,6 +49,32 @@ ProgressBar::~ProgressBar()
{ {
} }
void ProgressBar::reset()
{
m_value = m_minimum;
update();
}
void ProgressBar::setRange(int minimum, int maximum)
{
m_minimum = minimum;
m_maximum = maximum;
if (m_value < m_minimum || m_value > m_maximum)
m_value = m_minimum;
update();
}
void ProgressBar::setValue(int value)
{
if (m_value == value
|| m_value < m_minimum
|| m_value > m_maximum) {
return;
}
m_value = value;
update();
}
QString ProgressBar::title() const QString ProgressBar::title() const
{ {
return m_title; return m_title;
@@ -62,6 +88,7 @@ bool ProgressBar::hasError() const
void ProgressBar::setTitle(const QString &title) void ProgressBar::setTitle(const QString &title)
{ {
m_title = title; m_title = title;
update();
} }
void ProgressBar::setError(bool on) void ProgressBar::setError(bool on)
@@ -88,7 +115,7 @@ void ProgressBar::mousePressEvent(QMouseEvent *event)
emit clicked(); emit clicked();
return; return;
} }
QProgressBar::mousePressEvent(event); QWidget::mousePressEvent(event);
} }
void ProgressBar::mouseMoveEvent(QMouseEvent *) void ProgressBar::mouseMoveEvent(QMouseEvent *)

View File

@@ -35,7 +35,7 @@
#include <QtGui/QProgressBar> #include <QtGui/QProgressBar>
#include <QtGui/QMouseEvent> #include <QtGui/QMouseEvent>
class ProgressBar : public QProgressBar class ProgressBar : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
@@ -51,6 +51,12 @@ public:
void paintEvent(QPaintEvent *); void paintEvent(QPaintEvent *);
void mouseMoveEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *);
int minimum() const { return m_minimum; }
int maximum() const { return m_maximum; }
int value() const { return m_value; }
void reset();
void setRange(int minimum, int maximum);
void setValue(int value);
signals: signals:
void clicked(); void clicked();
@@ -62,6 +68,10 @@ private:
QString m_title; QString m_title;
bool m_error; bool m_error;
int m_progressHeight; int m_progressHeight;
int m_minimum;
int m_maximum;
int m_value;
}; };
#endif // PROGRESSPIE_H #endif // PROGRESSPIE_H