Qt Custom ProgressBar无法刷新(paintEvent)

时间:2018-01-24 11:37:23

标签: qt progress-bar refresh paintevent

我已经创建了自定义进度条,但是当我调用 SetValue() 方法时, paintEvent < 方法(覆盖)未被调用,因此进度条仅显示第一个值。

这是标题 grafica_progressbar.h

    #ifndef GRAFICA_PROGRESSBAR_H
    #define GRAFICA_PROGRESSBAR_H

    #include <QWidget>
    #include <QProgressBar>
    #include <QPaintEvent>

    #include <QPainter>
    #include <QBrush>
    #include <QStyle>
    #include <QPen>
    #include <QColor>

    class grafica_ProgressBar : public QProgressBar
    {
        Q_OBJECT
    public:
        grafica_ProgressBar();

    protected:
        void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
    };

    #endif // GRAFICA_PROGRESSBAR_H

这是cpp grafica_progressbar.cpp

#include "grafica_progressbar.h"

grafica_ProgressBar::grafica_ProgressBar()
{

}

void grafica_ProgressBar::paintEvent(QPaintEvent *)
{
    int tmpValue = value();
    int TopPos = QStyle::sliderPositionFromValue(minimum(), maximum(), tmpValue, width());

    QPainter p(this);

    if (tmpValue<maximum()*0.85)
    {
        p.setPen(Qt::green);
        p.setBrush(QBrush(Qt::green));
    }
    else
    {
        p.setPen(QColor(255,51,51));
        p.setBrush(QColor(255,51,51));
    }

     p.drawRect(0,0,TopPos,height());


    p.setPen(Qt::gray);
    p.setBrush(QBrush(Qt::lightGray));
    p.drawRect(TopPos, 0, width(), height()); //riempio tutto il resto di grigio


    p.setPen(Qt::black);
    p.setBrush(QBrush(Qt::black));
    p.drawText(0,0, width(), height(), Qt::AlignCenter, QString::number(tmpValue ) + " bar");
}

这是第一次调用userinterface costructor

TestProgres = new grafica_ProgressBar();

ui->gridLayout->addWidget(TestProgres);

TestProgres->setMaximum(400);
TestProgres->setValue(300);

如果我尝试在按钮内调用 TestProgres-&gt; setValue(200),我将无法看到任何刷新。

那么,问题出在哪里?

1 个答案:

答案 0 :(得分:0)

代码开始在&#34; 清理,重建&amp;运行&#34;操作

我已经编辑了代码,只是为了显示正确的值。

感谢所有人!