я создал собственный индикатор выполнения, но когда я вызываю метод SetValue(), метод paintEvent ( override) не вызывается, поэтому индикатор выполнения показывает только самое первое значение.
Это заголовок 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");
}
и это первый вызов конструктора пользовательского интерфейса
TestProgres = new grafica_ProgressBar();
ui->gridLayout->addWidget(TestProgres);
TestProgres->setMaximum(400);
TestProgres->setValue(300);
если я попытаюсь вызвать TestProgres->setValue(200) внутри кнопки, я не увижу никакого обновления.
Итак, в чем проблема?
update
послеsetValue
. - person Dmitry Sazonov   schedule 24.01.2018MainWindow
, добавляя 10 к значению ProgressBar каждый раз. Покажите свой код, где вы вызываетеsetValue
. - person Bearded Beaver   schedule 24.01.2018[SOLVED]
или подобное. Вместо этого ответьте на свой вопрос и предоставьте нам решение, а также отметьте его как принятое. Это поможет будущим читателям сайта. - person Goodbye StackExchange   schedule 24.01.2018