背景:自己写了一个子类MyTree,是由QTreeWidget派生的,在重写paintEvent过程中发现实现无效,界面并没有绘制任何内容
原因:
对于从QAbstractScrollArea继承为QTreeWidget和您的MyTree
的类,绘画不是直接在小部件中给出,而是在viewport()中给出,如文档:
无效QAbstractScrollArea :: paintEvent(QPaintEvent * event)重新实现 来自QFrame :: paintEvent()。
可以在子类中重新实现此事件处理程序以接收绘画 事件(传入事件),用于viewport()小部件。
注意:如果您打开一个画家,请确保在viewport()上将其打开。
解决方法:void MyTree::paintEvent(QPaintEvent *event)
{ QPainter painter(viewport()); }
替换
QPainter painter(this);
为
QPainter painter(viewport());
问题解决了。