以下是一个简单的进度条类,使用Qt的QTimer类定时刷新进度条:
#include <QWidget>
#include <QProgressBar>
#include <QTimer>
class ProgressBar : public QWidget
{
Q_OBJECT
public:
ProgressBar(QWidget *parent = nullptr)
: QWidget(parent), m_value(0)
{
m_progressBar = new QProgressBar(this);
m_progressBar->setRange(0, 100);
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &ProgressBar::updateProgressBar);
timer->start(1000); // 每1秒刷新一次进度条
}
public slots:
// 设置进度条当前值
void setValue(int value)
{
m_value = value;
update(); // 刷新界面
}
private slots:
// 更新进度条
void updateProgressBar()
{
if (m_value >= 100) {
m_value = 0; // 进度已满,重置为0
} else {
m_value += 10; // 每次增加10
}
setValue(m_value);
}
protected:
// 绘制进度条
void paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
int width = this->width();
int height = this->height();
QRectF rect(0, 0, width, height);
painter.drawRect(rect.adjusted(0, 0, -1, -1));
QRectF progressRect(1, 1, (width - 2) * m_value / 100.0, height - 2);
painter.fillRect(progressRect, Qt::blue);
}
private:
QProgressBar *m_progressBar;
int m_value;
};
使用方法:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
ProgressBar progressBar;
progressBar.show();
return app.exec();
}
可以通过setValue()函数设置进度条当前值,也可以通过updateProgressBar()函数定时更新进度条。在paintEvent()函数中绘制进度条的背景和前景。