QGraphicsScene两大功能梳理

QGraphicsScene

item的管理

  • QGraphicsScene提供了接口来管理大量的2D图形item(如圆,矩形,线等)。
  • 决定item的位置,在某一个区域内item是否显示
  • 可视化整个scene,或者放大并查看场景的某一部分。
  • scene自身不带有显示功能,只是管理item。显示需要创建GraphicsView
  • QGraphicsScene通过查找算法来管理item的位置,默认算法是 BSP tree。
  • QGraphicsScene 的边界矩形:item可以自由的放置在这个矩形内的任意位置,这个矩形是不限制大小的。这个边界仅被用以内部记录,管理scene中item的索引。如果没有设置这个边界框,QGraphics Scene会使用所有item的边界作为这个矩形框(调用itemsBoundingRect()返回的矩形)。itemsBoundingRect函数比较耗时,因为它会收集所有items的位置信息。故在对大场景进行设置时,要设置场景的大小。
  • QGraphicsScene通过items()来快速查找items的位置,这个函数有很多重载函数,根据指定位置查找item,在一个矩形框里的所有item查找。返回的item列表是通过堆排序,最上层的item就是列表中的第一个元素。使用ItemAt可以直接获取指定位置的第一个元素。
  • QGraphicsScene也保留了场景的选择信息。调用setSelectionArea()来选择items,调用clearSelection()来清除选择,调用selectedItems()来获取一个包含所有被选择的item的列表。