Qt重写QWidget实现按钮进度条

效果图:


核心代码:

构造函数设置默认的颜色

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



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值