QT自定义ProgressBar

QT自带的进度条在1%时无法显示为圆角,为此需要自定义类并重载绘制方法来解决。本文介绍了如何通过自定义类和重绘实现圆角进度条的效果。
摘要由CSDN通过智能技术生成

QT自定义ProgressBar

圆角进度条

QT自带的进度条,设置qss样式border-radius: 15px;,会有一个问题,进度条刚开始进度为1%时,由于进度条的宽度小于radius的大小,刚开始的进度条并不是圆角的,而是方角的,为了解决这个问题,自定义类QProgressBar,对paintEvent(QPaintEvent*e)进行重载,重新绘制进度条。
实现效果:
在这里插入图片描述

void ProgressBar::paintEvent(QPaintEvent *e)
{
   
	//height-40px;
    QPainter painter(this);
    QPainterPath draw_path;
    int radius=20;
    double percent=static_cast<double>(value())/static_cast<double>(maximum());
    percent=percent/15;
    painter.setRenderHint(QPainter::Antialiasing);
    while (radius*2>height()) {
   
        radius--;
    }

    draw_path.clear();
    draw_path.moveTo(radius,0);
    draw_path.arcTo(QRect(0,0,radius*2,radius*2),90,90);
    draw_path.lineTo(0,height()-radius);
    draw_path.arcTo(QRect(0,0,radius*2,radius*2),180,90);
    draw_path.lineTo(width()-radius,height
您可以通过继承 QProgressBar 类并重新实现绘制函数来自定义 Qt 进度条。 以下是一个示例代码: ```cpp #include <QtWidgets> class CustomProgressBar : public QProgressBar { public: explicit CustomProgressBar(QWidget* parent = nullptr) : QProgressBar(parent) { setMinimum(0); setMaximum(100); } protected: void paintEvent(QPaintEvent* event) override { QPainter painter(this); // 绘制背景 painter.fillRect(rect(), Qt::white); // 绘制进度条 int progressWidth = static_cast<int>(rect().width() * static_cast<double>(value()) / maximum()); QRect progressRect(rect().topLeft(), QSize(progressWidth, rect().height())); painter.fillRect(progressRect, Qt::blue); // 绘制文本 QString text = QString::number(value()) + "%"; painter.setPen(Qt::black); painter.drawText(rect(), Qt::AlignCenter, text); } }; int main(int argc, char** argv) { QApplication app(argc, argv); QMainWindow mainWindow; QWidget* centralWidget = new QWidget(&mainWindow); QVBoxLayout* layout = new QVBoxLayout(centralWidget); CustomProgressBar* progressBar = new CustomProgressBar(&mainWindow); progressBar->setValue(50); layout->addWidget(progressBar); mainWindow.setCentralWidget(centralWidget); mainWindow.show(); return app.exec(); } ``` 在此示例中,我们创建了一个名为 `CustomProgressBar` 的自定义进度条类。我们重新实现了 `paintEvent` 函数来绘制自己的进度条样式。在这个示例中,我们使用白色作为背景,蓝色作为进度条的颜色,并在进度条上方绘制了当前的进度文本。 您可以根据自己的需求修改绘制函数以实现您想要的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值