QT自定义ProgressBar
圆角进度条
QT自带的进度条,设置qss样式border-radius: 15px;
,会有一个问题,进度条刚开始进度为1%时,由于进度条的宽度小于radius的大小,刚开始的进度条并不是圆角的,而是方角的,为了解决这个问题,自定义类QProgressBar
,对paintEvent(QPaintEvent*e)
进行重载,重新绘制进度条。
实现效果:
void ProgressBar::paintEvent(QPaintEvent *e)
{
//height-40px;
QPainter painter(this);
QPainterPath draw_path;
int radius=20;
double percent=static_cast<double>(value())/static_cast<double>(maximum());
percent=percent/15;
painter.setRenderHint(QPainter::Antialiasing);
while (radius*2>height()) {
radius--;
}
draw_path.clear();
draw_path.moveTo(radius,0);
draw_path.arcTo(QRect(0,0,radius*2,radius*2),90,90);
draw_path.lineTo(0,height()-radius);
draw_path.arcTo(QRect(0,0,radius*2,radius*2),180,90);
draw_path.lineTo(width()-radius,height