Предупреждение QPainter внутри paintEvent

Я попытался нарисовать больше информации в QChartView, поэтому я заново реализую paintEvent

  virtual void paintEvent(QPaintEvent *event) {
QChartView::paintEvent(event);
OmenChart *mchr = dynamic_cast<OmenChart *>(this->chart());
if(mchr == nullptr)
return;
QPainter painter(this);

const int labelOffset = 2 + 2;
painter.setFont(this->font());
painter.setPen(QPen(Qt::black));
QFontMetrics fm(painter.font());const OmenScatterSeries *omnSr = mchr->serie();
QVector<QPointF> points = omnSr->pointsVector();
QStringList labels = omnSr->pointLabels();

for (int i(0); i < labels.count(); i++) {
QString pointLabel = labels[i];

// Position text in relation to the point
int pointLabelWidth = fm.width(pointLabel);
QPointF position(points.at(i));
position.setX(position.x() - pointLabelWidth / 2);
position.setY(position.y() - labelOffset);
painter.drawText(position, pointLabel);
}
}

и я беру эти ошибки

QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setFont: Painter not active
QPainter::setPen: Painter not active
QPainter::font: Painter not active
QWidget::paintEngine: Should no longer be called

Есть идеи по этому поводу? Я также использовал painter.begin и end, но я принял те же ошибки

0

Решение

Не рисуйте на своем подклассе QChartView, но вместо этого в своем окне просмотра.

QChartView происходит от QGraphicsView, который в свою очередь является производным от QAbstractScrollArea и в соответствии с этот ответ (а также цитируемый там документация) вы должны использовать окно просмотра в качестве устройства рисования для вашего QPainter, не сам виджет.

Итак, вместо

QPainter painter(this);

записывать

QPainter painter(viewport());

То же самое можно увидеть в источник QGraphicsView, т.е .:

// Set up the painter
QPainter painter(viewport());
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]