一、概述
Qt继承 QChartView 重写 paintEvent 函数后,容易出现两个问题:
a、Painter not active问题;
b 、QChartView原有的图形不显示了。
继承 QChartView 重写 paintEvent 函数时出现以下错误信息。
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setRenderHint: Painter must be active to set rendering hints
QPainter::translate: Painter not active
QPainter::setPen: Painter not active
QPainter::drawPath: Painter not active
paintEvent 函数
void ChartView::paintEvent(QPaintEvent *event)
{
if(m_press)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QPen pen;
pen.setWidth(2);
pen.setColor(QColor(255,255,255));
pen.setStyle(Qt::DashDotLine);
painter.setPen(pen);
QRect tempRt(m_startPT, m_endPT);
painter.drawRect(tempRt);
}
}
解决办法:
问题a 解决方法:
将QPainter painter(this);改为 QPainter painter(viewport());即可。
问题b 解决方法:
在需要添加 QChartView::paintEvent(event);
更改后
void ChartView::paintEvent(QPaintEvent *event)
{
QChartView::paintEvent(event);
if(m_press)
{
QPainter painter(viewport());
painter.setRenderHint(QPainter::Antialiasing);
QPen pen;
pen.setWidth(2);
pen.setColor(QColor(255,255,255));
pen.setStyle(Qt::DashDotLine);
painter.setPen(pen);
QRect tempRt(m_startPT, m_endPT);
painter.drawRect(tempRt);
}
}