这里所谓“坑”也不一定是Qt的bug,主要还是帮助文档不好理解或啃的不够透彻导致,总结一下以免重蹈覆辙绕弯路。
1、 Qt中事件传递是由父向子传递,同样在视图场景中事件传递是View->Scene->Item这样的顺序,所以上层的事件函数重写必须调用父类事件函数,实现事件的向下传递,不至于阻塞后面元素的事件处理。
2、 在View中调用setBackgroundBrush方法会阻止Scene中drawBackground方法的调用,这个帮助中有说明,属于帮助看的不仔细。另外View/Scene中的drawBackground和drawForeground方法类似事件函数,调用顺序是View->Scene,所以在自定义View中drawBackground和drawForeground方法时需要调用父类方法。
3、 QGraphicsScene::sceneRect和QGraphicsView::sceneRect是有区别的,QGraphicsScene::sceneRect是场景的实际范围大小,是一个抽象逻辑概念,例如用场景作为画布,为画布的实际大小。QGraphicsView::sceneRect则是在View中需要给Scene预留的区域大小,这个类似窗口概念&