QWidget::paintEngine:不应再在派生的 QTreeWidget 中调用 class

QWidget::paintEngine: Should no longer be called in a QTreeWidget derived class

我有一个 class、MyTree,它源自 QTreeWidget

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

引起以下问题,

QWidget::paintEngine: Should no longer be called

QPainter::begin: Paint device returned engine == 0, type: 1

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

如果 类 继承自 QAbstractScrollArea as QTreeWidget and your MyTree the painting is not given directly in the widget but in the viewport(),如文档所示:

void QAbstractScrollArea::paintEvent(QPaintEvent *event) Reimplemented from QFrame::paintEvent().

This event handler can be reimplemented in a subclass to receive paint events (passed in event), for the viewport() widget.

Note: If you open a painter, make sure to open it on the viewport().

所以解决方法如下:

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

我找到了解决办法: 通过替换

QPainter painter(this);

QPainter painter(viewport());

问题已解决。