QT自定义QProgressBar

本文介绍如何在QT中自定义QProgressBar来显示液位高度,包括动态改变液位高度和数值显示。通过创建CProgressBar类并重写paintEvent函数,实现了自定义的进度条样式。代码示例展示了绘制过程和构造函数中的设置,以达到更好的视觉效果。
摘要由CSDN通过智能技术生成

最近项目需要,需要利用QProgressBar显示液位高度,标准液位高度可动态改变,并显示数值。QT中的QProgressBar不能满足以上要求,需对其进行自定义。修改的方法是新类CProgressBar继承于QProgressBar,然后重写其paintenvent函数。以上是主要代码:


void CProgressBar::paintEvent(QPaintEvent *event)
{
QPainter p(this);


const int leftoffset = 15;
const int rightoffset = 30;
const int lineLength = 6;
const int interval = 3;
QRect rect = this->rect();
const double k = (double)(value() - minimum()) / (maximum()-minimum());
int x = (int)(rect.height() * k);


QRect progressbar

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以通过继承 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` 函数来绘制自己的进度条样式。在这个示例中,我们使用白色作为背景,蓝色作为进度条的颜色,并在进度条上方绘制了当前的进度文本。 您可以根据自己的需求修改绘制函数以实现您想要的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值