QT开发中文网

qt 环形进度条

在Qt中创建环形进度条可以使用QProgressBar和QPainter来实现。下面是一个简单的示例代码:

#include <QtWidgets>

class CircularProgressBar : public QProgressBar
{
public:
    CircularProgressBar(QWidget* parent = nullptr) : QProgressBar(parent)
    {
        setStyleSheet(QString("QProgressBar {"
                              "border: none;"
                              "text-align: center;"
                              "background-color: transparent;"
                              "}"
                              "QProgressBar::chunk {"
                              "border-radius: 10px;"  // 调整圆角大小
                              "background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0,"
                                "stop:0 #78d7f7, stop:%1 #0078d7);"
                              "}").arg(getGradientStop()));  // 获取渐变色停止位置
    }

protected:
    void paintEvent(QPaintEvent* event) override
    {
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing);

        QRectF rectangle(5.0, 5.0, width() - 10.0, height() - 10.0);

        int startAngle = 90 * 16;   // 圆弧开始角度(顶部位置)
        int spanAngle = static_cast<int>(360 * (value() / static_cast<double>(maximum())) * 16);   // 圆弧覆盖范围

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

        painter.drawEllipse(rectangle);

        painter.setBrush(palette().base());
        painter.drawPie(rectangle, startAngle, spanAngle);

        QStyleOptionProgressBar option;
        initStyleOption(&option);
        option.textVisible = false;   // 隐藏进度条文本

        style()->drawControl(QStyle::CE_ProgressBar, &option, &painter, this);
    }

private:
    qreal getGradientStop() const
    {
        return static_cast<qreal>(value()) / maximum();
    }
};

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    QWidget window;
    QVBoxLayout layout(&window);

    CircularProgressBar progressBar;
    progressBar.setMinimum(0);
    progressBar.setMaximum(100);
    progressBar.setValue(50);   // 设置进度值

    layout.addWidget(&progressBar);
    
    window.setLayout(&layout);
    window.show();

    return app.exec();
}

这是一个自定义的CircularProgressBar类,继承自QProgressBar。通过重写paintEvent方法,我们可以使用QPainter绘制圆形背景和覆盖范围。在示例中,我们使用渐变色来呈现进度条的效果。

请注意,这只是一个简单的示例代码,你可以根据需要进行修改和定制。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=10586

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?