QGraphicsScene :: changed()总是返回一个尺寸为应用程序窗口的矩形

时间:2011-02-05 00:55:53

标签: qt qt4 qgraphicsview

在Qt 4.7.1 Windows应用程序中,连接到QGraphicsScene :: changed()的插槽按预期触发,但脏区域计数始终为1,我获得的rect大小始终与我的应用程序窗口相同。我试过调用QGraphicsView :: setViewportUpdateMode(QGraphicsView :: MinimalViewportUpdate);但这没有帮助。

有没有办法告诉Qt只给我改变页面的区域?

1 个答案:

答案 0 :(得分:2)

QGRaphicsView中的更新与QGraphicsScene中的更新不同。视图中的更新是由需要重新绘制视图引起的。有无改变场景。这通常来自窗口(调整大小)和视图更改(滚动)。场景中的更改也会触发对视图的更新。

场景中的更改是场景内容的更改。像添加或删除项目,缩放或翻译转换一样。这将发出changed()信号。显示该场景的所有视图也将自行更新以显示。

例如。滚动视图不会生成任何场景更新,因为场景中没有任何更改。将调用场景中项目的paint()功能进行重绘。但是不会从场景中发出changed()信号。

例如,如果您更改了场景的比例,则整个场景都会发生变化。除了整个重绘之外,场景将发出changed()信号并指示整个场景发生了变化。但是如果向场景添加新项目,则changed()应仅指示新项目的矩形。

如果您想知道需要重新绘制场景的哪个部分,除了调用QGraphicsView::setViewportUpdateMode()之外,还需要在视图中安装事件过滤器并检查QEvent::Paint。请注意,QPaintEvent中的region和rect位于视图的局部坐标中,可以与场景不同。但是QGraphicsView有许多映射函数可以进行转换。