0

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

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

4

1 回答 1

2

a 中的更新与 aQGRaphicsView中的更新不同QGraphicsScene。视图中的更新是由需要重新绘制视图引起的。有或没有改变场景。这典型是来自窗口(resize)和视图更改(scroll)。场景的变化也会触发视图的更新。

场景的变化就是场景内容的变化。就像添加或删除一个项目,缩放或平移转换。这将发出changed()信号。显示该场景的所有视图也将自行更新以进行显示。

例如。滚动视图不会产生任何场景更新,因为场景中没有任何变化。场景中项目的paint()函数将被调用以重新绘制。但是changed()现场不会发出任何信号。

例如,如果你改变了场景的比例,整个场景就会改变。除了整个重绘之外,场景还会发出changed()信号并指示整个场景发生了变化。但是如果你在场景中添加一个新项目, changed() 应该只指示新项目的矩形。

如果你想知道场景的哪一部分需要重绘,除了调用 之外QGraphicsView::setViewportUpdateMode(),还需要在视图中安装一个事件过滤器并检查QEvent::Paint. 请注意,QPaintEvent 中的区域和矩形位于视图的局部坐标中,可能与场景不同。但是QGraphicsView有很多映射函数来做转换。

于 2011-02-05T22:18:11.950 回答