在相比于其它控件QGraphicsView算是个人使用的比较少的控件了,最近在开发一个项目,针对QGraphicsView做了很多开发,这里总结一下开发中遇到的一些问题以及解决方案。
1.视图定位
QGraphicsView其实只是一个展示器,类似于电脑设备的显示窗口,而QGraphicsScene是显示器中当前的场景,类似于显示器上的一幅画,而QGraphicsItem是这幅画上面的一些物件。通过这个层次关系我们就知道如何布局物件,更新View中的视图了。在开发过程中,有时候场景Scene会比视口View大很多,所以我们只能看到场景的一部分,这点就类似于地图的显示。那么如何动态调整QGraphicsView中显示的场景范围呢?
一开始我走了弯路,尝试通过控制滚动条的范围,来进行控制视口显示的范围,后来发现不行,无法定位显示,后发现QGraphicsView提供了视口调整的函数,直接调整视口的显示范围即可。
void ChangeTheShowScope(QRect scopeRect)
{
ui.graphicsView->setSceneRect(scopeRect);
ui.graphicsView->viewport()->update();
ui.graphicsView->viewport()->repaint();
}