它有什么功能boundingRect()
?
在码头中,描述了有必要重新定义两个功能:
void paint(*painter, const *option, QWidget *)
有了它,它或多或少是清晰的,
boundingRect()
返回一个矩形区域,这个区域会影响什么?如果返回面积 (0,0,0,0) 会发生什么???
它有什么功能boundingRect()
?
在码头中,描述了有必要重新定义两个功能:
void paint(*painter, const *option, QWidget *)
有了它,它或多或少是清晰的,
boundingRect()
返回一个矩形区域,这个区域会影响什么?如果返回面积 (0,0,0,0) 会发生什么???
QGraphicsItem 有几个相关的函数,它们返回对象的“形状”,但它们彼此并不等效。
QGraphicsItem::boundingRect
- 就屏幕上的绘图而言,元素“占据”的区域。必须包括重绘期间将受到影响的所有点的元素。如果您返回的区域大于实际需要的区域,则疼痛函数的调用次数将超过必要的次数。如果不是必要的,那么当用户移动场景的其他元素时,错误地触摸元素的边缘,它将“覆盖”边缘。当移动元素本身时,“痕迹”可能会保留:场景将仅重绘移动元素所在的区域(通过元素的旧位置和boundingRect确定)并为新位置调用paint。如果paint在boundingRect之外绘制了一些东西,那么这些元素可能不会被删除。通常,程序员知道他将用油漆绘制什么以及它的大小。
如果元素的大小随着某些参数而改变,那么在改变这些参数之前,调用prepareGeometryChange是很重要的,它会根据boundingRect的“旧”值记住哪个区域需要重绘。
QGraphicsItem::boundingRegion
- 如果您的元素是“一维而不是二维”,则需要覆盖。例如,对角线穿过屏幕的连接器具有等于整个屏幕的boundingRect,即 任何喷嚏都必须重新绘制。QGraphicsItem::shape
- 就用户交互而言的对象形状。那些。将被视为对元素的点击的点击区域。如果用户没有重写该函数,则返回boundingRect。QGraphicsItem::opaqueArea
- 就重绘而言,对象的不透明部分。如果元素位于另一个元素的不透明部分“下方”,此方法允许您不重绘部分元素。默认情况下,元素是(半)透明的,即 返回一个空的 QPainterPath。