prepareGeometryChange
这个函数用于为图形的几何形状变化做准备。在改变一个项目的边界矩形之前调用此函数,以保持 QGraphicsScene 的索引是最新的。如果必要的话,prepareGeometryChange() 会调用 update()。
QGraphicsScene认为所有图元的boundingRect函数与shape函数都是不发生改变的,除非用户进行通知。如果你想改变一个图元的范围,必需先调用prepareGeometryChange以允许QGraphicsScene进行更新。
update
这个函数安排重绘此项目中被矩形 rect 覆盖的区域。每当你的项目需要重绘时,例如其外观或大小发生变化时,你都可以调用此函数。这个函数不会立即触发绘制;相反,它会安排一个绘制请求,这个请求将由 QGraphicsView 在控制到达事件循环后处理。只有当项目在任何相关的视图中可见时,它才会被重绘。作为项目被重绘的副作用,与区域 rect 重叠的其他项目也可能被重绘。如果项目是不可见的(即,isVisible() 返回 false),则此函数不执行任何操作。
使用区别
采用如下代码绘制元素边界矩形
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
{painter->setRenderHint(QPainter::Antialiasing);QRectF rect = boundingRect();painter->drawRect(rect);
}
再变更了元素大小后,采用update(),绘制的边界矩形不会清除,如下:
再变更了元素大小后,采用prepareGeometryChange(),绘制的边界矩形会清除,如下: