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的绘图功能,可以实现圆形绘制和动画效果。

QT自定义圆形进度条_第1张图片

 

你可能感兴趣的:(qt,ui,开发语言)