我试图在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,但是我也犯了同样的错误
发布于 2018-08-18 01:49:38
不要使用QChartView的子类,而是使用它的视图。
QChartView是从QGraphicsView派生的,而后者又是从QAbstractScrollArea派生的,根据这个答案 (以及引用的文档),您应该使用viewport作为QPainter的画图设备,而不是小部件本身。
所以,而不是
QPainter painter(this);写
QPainter painter(viewport());
在QGraphicsView的来源中也可以看到同样的情况,即:
// Set up the painter
QPainter painter(viewport());https://stackoverflow.com/questions/51903613
复制相似问题