QWidget :: paintEngine:不再应该在QTreeWidget派生类中调用

时间:2018-10-20 04:18:05

标签: c++ qt qt5 qpainter qtreewidget

我有一个MyTree类,它是从QTreeWidget

派生的
void MyTree::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
}

引起以下问题,

  

QWidget :: paintEngine:应该不再被调用

     

QPainter :: begin:绘制设备返回的引擎== 0,键入:1

有人可以帮我解决问题吗?

2 个答案:

答案 0 :(得分:2)

对于从QAbstractScrollArea继承为QTreeWidget和您的MyTree的类,绘画不是直接在小部件中给出,而是在viewport()中给出,如文档:

  

无效QAbstractScrollArea :: paintEvent(QPaintEvent * event)重新实现   来自QFrame :: paintEvent()。

     

可以在子类中重新实现此事件处理程序以接收绘画   事件(传入事件),用于viewport()小部件。

     

注意:如果您打开一个画家,请确保在viewport()上将其打开。

因此解决方案如下:

void MyTree::paintEvent(QPaintEvent *event)
{
    QPainter painter(viewport());
}

答案 1 :(得分:0)

我找到了解决方案: 通过替换

  

QPainter painter(this);

使用

  

QPainter painter(viewport());

问题解决了。