1.方法:重写painevent 函数
2.主要内容:圆角进度条 = 圆角矩形路径QPainterPath & 进度矩形路径QPainterPath
(&是求两个路径的交集路径的赋值运算符,等同于QPainterPath::intersected)
3.重写例子:
void CProgressBar::paintEvent(QPaintEvent *ev)
{
QPainter Painter(this);
QBrush Brush;
Painter.setRenderHint(QPainter::Antialiasing);
//进度条底色
Painter.save();
Painter.setBrush(Qt::gray);
Painter.drawRoundedRect(this->rect(), this->height() / 2,this->height() / 2);
Painter.restore();
//进度条底色
Painter.save();
int precent;
int width_R2 = 0; //进度矩形宽
if (!this->maximum())
{
precent = 0;
}
else
{
precent = value()*100 / this->maximum();
width_R2 = precent / 100.0 * this->width();
qDebug()<<"precent:"<<precent <<value() << this->maximum() <<width_R2 ;
}
//垂直方向渐变色
QLinearGradient myGradient(0,0,width_R2,0);
myGradient.setColorAt(0,QColor(160,179,210));
myGradient.setColorAt(1,QColor(124,142,172));
Painter.setPen(Qt::NoPen);
QPainterPath BasePath;
BasePath.addRoundedRect(this->rect(), this->height() / 2,this->height() / 2);
QPainterPath ProcessPath;
ProcessPath.addRect(0,0,width_R2, this->height());
QPainterPath drawPath;
drawPath = ProcessPath & BasePath;
Painter.fillPath(drawPath,myGradient);
Painter.restore();
}