Qt如何在进度条上显示自定义文字

62 篇文章 8 订阅

先看看效果:

在上代码:

//author:autumoon
//联系QQ:4589968
//日期:2022-01-21

    //添加一个HBox
    QHBoxLayout* hbl = new QHBoxLayout(ui->centralwidget);
    hbl->setGeometry(QRect(20, 30, 400, 40));

    //添加多个进度条和文字
    int nProgressBarCount = 7;

    for (int i = 0; i < nProgressBarCount; ++i)
    {
        QProgressBar* pbCur = new QProgressBar();
        hbl->addWidget(pbCur);
        pbCur->setGeometry(0,0,50, 40);
        pbCur->setMaximum(100);
        pbCur->setValue(30);
        pbCur->setFormat("这是一个测试30%");
        pbCur->setAlignment(Qt::AlignRight | Qt::AlignCenter);

        if (i == 0)
        {
            pbCur->setMaximum(0);
            //pbCur->setValue(0);
        }

        pbCur->show();
    }

说下过程:

最近有个需求,想在Qt的进度条上显示文字,查阅网上资料,结果一时竟然没有找到好的办法,有的人说使用QLable直接放在QProgressBar上,然后设置透明属性,总觉得这个方法不是太好,直到我找到了一篇博文《Qt 进度条QProgressBar的一些相关使用方法与设置》,提到了上述设置方式,也就是setFormat和setAlignment,亲测非常好用。

这段代码使用了动态添加空间的方法,其中第一个进度条,使用了setMaxmum(0)实现繁忙显示,原文中说“如果最小值和最大值都设置为0,进度条会显示了一个繁忙指示,而不会显示当前的值。这一点有时候很有用。”不过我实际测试,发现只需要设置setMaximum(0)即可。

特此分享,供参考。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过继承 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、付费专栏及课程。

余额充值