效果图:
核心代码:
构造函数设置默认的颜色
ProgressWidget::ProgressWidget(QWidget *parent) :
QWidget(parent)
{
setAutoFillBackground(true);
m_color.setRgb(173, 119, 67,150);
m_backGroundColor.setRgb(77,77,77,5);
}
重写paintEvent实现绘制
void ProgressWidget::paintEvent(QPaintEvent *e)
{
Q_UNUSED(e);
QPainter p(this);
p.setRenderHint(QPainter::Antialiasing);
QRectF outRect(0, 0, width(), height());
p.setPen(Qt::NoPen);
p.setBrush(QBrush(m_backGroundColor));
p.drawRoundedRect(outRect,10,10);
p.setBrush(QBrush(m_color));
p.drawRoundedRect(0,0,m_persent,height(),10,10);
}
设置进度条的值
void ProgressWidget::SetPersent(int persent)
{
if(persent != m_persent)
{
m_persent = persent *width()/100;
update();
}
}
重写mousePressEvent事件实现按钮的点击
void ProgressWidget::mousePressEvent(QMouseEvent *event)
{
Q_UNUSED(event);
emit clicked();
}
设置按钮的图片
void ProgressWidget::SetPixmap(const QString &pix)
{
QPixmap pixmap(pix);
QPalette palette(this->palette());
palette.setBrush(backgroundRole(), QBrush(pixmap));
this->setPalette(palette);
}
void
ProgressWidget
::
SetColor
(
int
r
,
int
g
,
int
b
,
int
a
)
{
m_color.setRgb(r,g,b,a);
}
void ProgressWidget::SetGroundColor(int r, int g, int b, int a)
{
m_backGroundColor.setRgb(r,g,b,a);
}
来源:https://blog.csdn.net/yu_20501253/article/details/80733440
完整代码:https://download.csdn.net/download/yu_20501253/10486096