Qt自定义进度条

瞎扯

转眼已经折腾Qt(画图软件23333)快5个月了,C++的东西没学到多少,各种软件绘图技巧倒是折腾了不少。在刚开始工作的时候看到设计稿的软件界面还是一脸懵逼的,现在发现没有什么是Qt的paint()和PS解决不了的,如果有,再加个Ae~ o( ̄▽ ̄)ブ
另外,现在CSDN真恶心,还清除以前的积分ε=( o`ω′)ノ

简介

在需要按比例显示数据的时候,进度条是必不可少的。Qt中有一个进度条相关的类QProgressBar,这个类提供了简单的水平或垂直的进度条,可以通过修改qss简单的改变下样式:
自带进度条

简单使用的话自带的样式就够看了,但是也有时候设计非要搞些酷炫的效果,没办法只能折腾下了……比如,设计稿非要整个两端椭圆的进度条,qss就没辙了。这篇文章主要总结下Qt在绘制控件方面的经验,画都能画出来了,其他骚操作就随便搞了,下面是折腾出来的栗子:
各种进度条

各种进度条

重绘paint之两端圆角进度条(继承QProgressbar)

图中第一个,其实也可以直接继承QWidget的,就少写个设置百分比和最小最大值的函数,主要还是重写paint函数,画出进度条底图和根据当前value值画出蓝色进度条:

void RadiusProgressBar::paintEvent(QPaintEvent *)
{
    QPainter p(this);
    QRect rect = QRect(0, 0, width(), height()/2);
    QRect textRect = QRect(0, height()/2, width(), height()/2);

    const double k = (double)(value() - minimum()) / (maximum()-minimum());
    int x = (int)(rect.width() * k);
    QRect fillRect = rect.adjusted(0, 0, x-rect.width(), 0);

    QString valueStr = QString("%1%").arg(QString::number(value()));
    QPixmap buttomMap = QPixmap(
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值