在使用QGraphicsView视图框架时,发现不能显示QGraphicsItem。
首先认为是创建的对象在参数传递的过程中丢失,即在多次赋值传递中,赋值的对象没有在堆上申请内存而被析构或被与相近名称的对象混淆而未调用。
经调试输出信息,发现最终的view中确实存在对应数量的item,只是没有显示出来。
是
是否没有上色、没有设置边框大小、线条为0等情况,造成绘制后不可见。
经检验,item设置了正确的QRecF、QPen、QBrush,正常情况下是会有可视视图的。
经过多次调试发现:
之前在QGraphicsView类中罗列了各种事件,以备后续重写。
注意到:
void paintEvent(QPaintEvent *event) override;
声明了但还未实现,导致paint函数被重写但未必调用。使用已经构建完成的item对象没有完成绘制,造成了不能显示item图元的问题。
相关函数被重写或调用,但未得到使用。
这个bug花了一天多的时间集中排查出来的,查找bug时要关注导致问题出现的多个角度和环节,以逐步缩小排查范围。多使用调试输出信息。