QT自定义圆形进度条

以下是一个简单的示例,展示如何创建一个自定义的圆形进度条控件。
1.创建一个新的Qt控件类,继承QProgressBar类。在该类的头文件中添加以下代码:
    class CircularProgressBar : public QProgressBar
    {
            Q_OBJECT

    public:
        CircularProgressBar(QWidget* parent = nullptr);

    protected:
        void paintEvent(QPaintEvent* event) override;
    };
2.在源文件中实现构造函数和绘制事件:
    CircularProgressBar::CircularProgressBar(QWidget* parent)
        : QProgressBar(parent)
    {
        //设置样式表,去掉默认边框和背景
        QString styleSheet = "QProgressBar {border: none; background: none;}";
        setStyleSheet(styleSheet);
    }

    void CircularProgressBar::paintEvent(QPaintEvent* event)
    {
        Q_UNUSED(event);

        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing, true);

        QRectF rectangle(0.0, 0.0, width(), height());
        int startAngle = 90 * 16; //开始角度为90度,转换成16进制
        int spanAngle = -360 * 16 * value() / maximum(); //根据当前值计算角度,顺时针转动为负

        painter.setPen(Qt::NoPen);
        painter.setBrush(palette().highlight());
        painter.drawEllipse(rectangle);

        painter.setBrush(palette().base());
        painter.drawPie(rectangle, startAngle, spanAngle);
    }
3.将该控件添加到应用程序中:
    CircularProgressBar* progressBar = new CircularProgressBar(parentWidget);
    progressBar->setRange(0, 100);
    progressBar->setValue(50);
这个自定义圆形进度条控件将继承QProgressBar类的所有基本行为和属性,但具有独特的外观和动画效果。它通过重写paintEvent()函数来自定义绘制,并使用setStyleSheet()函数来设置样式表。通过Qt的绘图功能,可以实现圆形绘制和动画效果。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值