当从Qt4移植到Qt5时,有一个类GraphWidget,它继承自类QWidget。
m_plot = new QwtPlot(this);
ui->verticalLayout->addWidget(m_plot);
……
m_directPainter = new QwtPlotDirectPainter(m_plot->canvas());
m_plot->canvas()->setAttribute(Qt::WA_PaintOutsidePaintEvent, true);
……
m_directPainter.drawSeries(……);
属性Qt::WA_PaintOutsidePaintEvent
已不存在。如何使m_directPainter正常工作?
正如我从Qt5文档中了解到的,我是否应该实现paintEvent()
函数,并在那里调用painter
?
Qt::WA_PaintOutsidePaintEvent
的引入是为了允许将Qt3程序移植到Qt4。Qt4小部件应该只从paintEvent()
绘制,因此在Qt5中删除了属性(好主意!(。因此,您应该将所有绘制代码转移到派生的paintEvent()
方法中。
Qt::WA_PaintOutsidePaintEvent仅与已随Qt5移除的X11绘制引擎结合使用时具有效果。因此,您可以简单地删除该行,因为它对Qt5(或Qt4,当不运行本地图形系统时(没有影响。
如果没有此标志,QwtPlotDirectPainter使用效率稍低的路径进行增量绘制,但也避免了在将代码移动到paintEvent中时必须进行的完全重新绘制。