效果图
思路:
1.继承Qt已有的QProgressBar
2.重写其void paintEvent(QPaintEvent *e)函数
2.1类内创建一个成员变量int curVal;
2.2用QTimer不断增加curVal的值,到了QProgressBar的value()值以后重新置零,循环往复。
重要实现代码:
void MyProcessBar::paintEvent(QPaintEvent *e)
{
QProgressBar::paintEvent(e);
QStyleOptionProgressBar opt;
initStyleOption(&opt);
if (m_curVal != 0)
{
QPainter painter(this);
QRect rect1 = style()->subElementRect(QStyle::SE_ProgressBarContents, &opt, this); //用this->rect();得到的值是一样的。
double childWidth=static_cast<double>(m_curVal)/static_cast<double>(m_maxVal)*rect1.width();
QLinearGradient gradient(0, 0, childWidth, rect1.height());
gradient.setColorAt(0,Qt::cyan);
gradient.setColorAt(1,Qt::yellow);
painter.setBrush(gradient);
painter.setPen(Qt::NoPen);
QRectF rect2=QRectF(rect1.topLeft(),QSize(static_cast<int>(childWidth),static_cast<int>(rect1.height())));
painter.drawRoundedRect(rect2, 10, 10);
}
}