QGraphicsView
类提供了一个用于显示 QGraphicsScene
内容的小部件,它在一个可滚动的视口中可视化场景的内容。要创建包含几何元素的场景,请参阅 QGraphicsScene
的文档。QGraphicsView
是图形视图框架的一部分。
为了可视化一个场景,首先构建一个 QGraphicsView
对象,并在构造函数中传递指向你想可视化的场景的地址。或者,你也可以稍后通过调用 setScene()
方法来设置场景。在调用 show()
后,视图默认会滚动到场景的中心并显示此时可见的任何元素。例如:
1QGraphicsScene scene;
2scene.addText("Hello, world!");
3
4QGraphicsView view(&scene);
5view.show();
你可以通过使用滚动条或调用 centerOn()
方法显式地滚动到场景上的任何位置。通过向 centerOn()
传递一个点,QGraphicsView
将滚动其视口以确保该点位于视图的中心。对于滚动到一个 QGraphicsItem
,则会确保该物品的中心位于视图的中心。如果你只想确保某个区域可见(但不一定居中),可以调用 ensureVisible()
方法。
QGraphicsView
可以用来可视化整个场景或仅部分场景。可视化的区域默认在视图首次显示时自动检测(通过调用 QGraphicsScene::itemsBoundingRect()
)。要自己设置可视化的区域矩形,可以调用 setSceneRect()
。这将适当地调整滚动条的范围。需要注意的是,尽管场景支持几乎无限的大小,但滚动条的范围永远不会超过整数的范围(INT_MIN
和 INT_MAX
)。
QGraphicsView
通过调用 render()
方法来可视化场景。默认情况下,使用常规的 QPainter
在视口上绘制元素,并使用默认的渲染提示。要改变 QGraphicsView
在绘制元素时传递给 QPainter
的默认渲染提示,可以调用 setRenderHints()
。
默认情况下,QGraphicsView
提供了一个常规的 QWidget
作为视口小部件。你可以通过调用 viewport()
访问这个小部件,或者通过调用 setViewport()
替换它。为了使用 OpenGL 渲染,只需调用 setViewport(new QGLWidget)
。QGraphicsView
将接管视口小部件的所有权。
QGraphicsView
支持使用 QTransform
的仿射变换。你可以将矩阵传递给 setTransform()
,或者调用方便函数 rotate()
、scale()
、translate()
或 shear()
。最常用的两种变换是缩放,用于实现缩放功能,和旋转。QGraphicsView
在变换期间保持视图中心固定。由于场景对齐方式(通过 setAlignment()
设置),变换视图不会对视觉效果产生影响。
你可以使用鼠标和键盘与场景上的元素交互。QGraphicsView
将鼠标和键盘事件转换成场景事件(继承自 QGraphicsSceneEvent
),并转发给可视化的场景。最终,是个体元素处理这些事件并对它们作出反应。例如,如果你点击一个可选择的元素,该元素通常会通知场景它已被选中,并且还会重新绘制自身以显示选择框。类似地,如果你点击并拖动鼠标移动可移动元素,是该元素处理鼠标移动并移动自身。元素交互默认是启用的,可以通过调用 setInteractive()
切换。
你还可以提供自己的自定义场景交互,通过创建 QGraphicsView
的子类并重写鼠标和键盘事件处理器。为了简化你如何程序性地与视图中的元素交互,QGraphicsView
提供了映射函数 mapToScene()
和 mapFromScene()
,以及元素访问器 items()
和 itemAt()
。这些函数允许你在视图坐标和场景坐标之间映射点、矩形、多边形和路径,并使用视图坐标查找场景上的元素。
更多相关信息,请参阅 QGraphicsScene
、QGraphicsItem
和 QGraphicsSceneEvent
。
QGraphicsView
中的成员类型文档描述了用于控制视图行为的不同枚举类型。下面是每个枚举类型的翻译:
缓存模式(Cache Mode)
此枚举描述了你可以在 QGraphicsView
的缓存模式中设置的标志。
常量
-
QGraphicsView::CacheNone
值:0x0
所有绘制操作直接在视口上进行。 -
QGraphicsView::CacheBackground
值:0x1
背景被缓存。这影响自定义背景和基于backgroundBrush
属性的背景。当此标志被启用时,QGraphicsView
将分配一个与视口完全尺寸相同的位图。
CacheMode
类型是 QFlags<CacheModeFlag>
的别名。它存储 CacheModeFlag
值的或组合。
拖动模式(Drag Mode)
此枚举描述了当按下并在视口上拖动鼠标时视图的默认行为。
常量
-
QGraphicsView::NoDrag
值:0
什么也不发生;鼠标事件被忽略。 -
QGraphicsView::ScrollHandDrag
值:1
光标变为指向的手指,拖动鼠标将滚动滚动条。此模式适用于交互和非交互模式。 -
QGraphicsView::RubberBandDrag
值:2
出现橡皮筋。拖动鼠标将设置橡皮筋的几何形状,所有被橡皮筋覆盖的项将被选中。此模式对于非交互视图是禁用的。
性能优化标志(Optimization Flags)
此枚举描述了你可以在 QGraphicsView
中启用以提高渲染性能的标志。默认情况下,没有这些标志被设置。请注意,设置一个标志通常会产生副作用,而这种效应可能在不同的绘图设备和平台上有所不同。
常量
-
QGraphicsView::DontClipPainter
值:0x1
此值已过时,无效果。 -
QGraphicsView::DontSavePainterState
值:0x2
在渲染时,QGraphicsView
保护画家状态(参见QPainter::save()
)当渲染背景或前景,以及每个项目时。这允许你将画家留在修改后的状态(即,你可以在不恢复状态的情况下调用QPainter::setPen()
或QPainter::setBrush()
)。然而,如果项目始终恢复状态,你应该启用此标志以防止QGraphicsView
做同样的事情。 -
QGraphicsView::DontAdjustForAntialiasing
值:0x4
禁用QGraphicsView
的抗锯齿自动调整曝光区域。在QGraphicsItem::boundingRect()
边界上绘制抗锯齿线的项目可能会在边界外渲染部分线条。为了避免渲染伪影,QGraphicsView
在所有方向上将所有曝光区域扩展2像素。如果你启用此标志,QGraphicsView
将不再执行这些调整,最小化需要重绘的区域,从而提高性能。一个常见的副作用是,确实使用抗锯齿绘制的项目在移动时可能会在场景上留下绘制痕迹。 -
QGraphicsView::IndirectPainting
值:0x8
自 Qt 4.6 版本起,恢复旧的绘制算法,该算法调用QGraphicsView::drawItems()
和QGraphicsScene::drawItems()
。仅用于与旧代码的兼容性。
视口锚点(Viewport Anchor)
此枚举描述了 QGraphicsView
在用户调整视图大小或视图被转换时可以使用的可能的锚点。
常量
-
QGraphicsView::NoAnchor
值:0
不使用锚点,即视图不改变场景的位置。 -
QGraphicsView::AnchorViewCenter
值:1
使用视图中心的场景点作为锚点。 -
QGraphicsView::AnchorUnderMouse
值:2
使用鼠标下的点作为锚点。
视口更新模式(Viewport Update Mode)
此枚举描述了当场景内容变化或被曝光时 QGraphicsView
如何更新其视口。
常量
-
QGraphicsView::FullViewportUpdate
值:0
当任何可见部分的场景变化或重新曝光时,QGraphicsView
将更新整个视口。这种方法在QGraphicsView
花费更多时间计算要绘制的内容而不是实际绘制(例如,当大量小项目反复更新时)时最快。这是为不支持部分更新的视口(如QGLWidget
)和需要禁用滚动优化的视口首选的更新模式。 -
QGraphicsView::MinimalViewportUpdate
值:1QGraphicsView
将确定需要重绘的最小视口区域,通过避免未更改区域的重绘,最大限度地减少绘制时间。这是QGraphicsView
的默认模式。虽然这种方法通常提供了最佳性能,但如果场景中有许多小的可见变化,QGraphicsView
可能会花费更多的时间寻找最小方法而不是实际绘制。 -
QGraphicsView::SmartViewportUpdate
值:2QGraphicsView
将尝试通过分析需要重绘的区域来找到最优的更新模式。 -
QGraphicsView::BoundingRectViewportUpdate
值:4
视口内所有变化的边界矩形将被重绘。此模式的优点是QGraphicsView
只搜索一个区域的变化,从而减少了确定需要重绘内容的时间。缺点是未改变的区域也需要被重绘。 -
QGraphicsView::NoViewportUpdate
值:3
当场景变化时,QGraphicsView
将永远不会更新其视口;预期用户控制所有更新。此模式禁用了QGraphicsView
中所有(潜在缓慢)的项目可见性测试,适用于需要固定帧率的场景,或视口以其他方式在外部更新的情况。
以上枚举在 Qt 4.3 中被引入或修改。
QGraphicsView
的属性文档描述了可以用来控制和获取视图行为的各种属性。以下是每个属性的翻译:
对齐方式(Alignment)
此属性持有当整个场景可见时场景在视图中的对齐方式。 如果整个场景在视图中可见(即,没有可见的滚动条),则视图的对齐方式将决定场景在视图中的渲染位置。例如,如果对齐方式是 Qt::AlignCenter
(默认),场景将在视图中居中,如果对齐方式是 (Qt::AlignLeft | Qt::AlignTop)
,场景将渲染在视图的左上角。
访问函数:
Qt::Alignment alignment() const
获取对齐方式void setAlignment(Qt::Alignment alignment)
设置对齐方式
背景画刷(Background Brush)
此属性持有场景的背景画刷。 此属性为视图中的场景设置背景画刷。它用于覆盖场景自身的背景,并定义 drawBackground()
的行为。为了为此视图提供自定义背景绘制,你可以重新实现 drawBackground()
方法。
默认情况下,此属性包含一个带有 Qt::NoBrush
模式的画刷。
访问函数:
QBrush backgroundBrush() const
获取背景画刷void setBackgroundBrush(const QBrush &brush)
设置背景画刷
缓存模式(Cache Mode)
此属性持有视图哪些部分被缓存。 QGraphicsView
可以在 QPixmap
中缓存预渲染的内容,然后将其绘制到视口上。此类缓存的目的是加快那些渲染较慢区域的总渲染时间。例如纹理、渐变和具有 alpha 混合的背景可能显著地慢于渲染,特别是在视图被转换时。CacheBackground
标志启用视图背景的缓存。
默认情况下,没有任何内容被缓存。
访问函数:
QGraphicsView::CacheMode cacheMode() const
获取缓存模式void setCacheMode(QGraphicsView::CacheMode mode)
设置缓存模式
拖动模式(Drag Mode)
此属性持有当按住左键在场景上拖动鼠标时的行为。 此属性定义了当用户点击场景背景并拖动鼠标时应该发生什么(例如,使用指向手光标滚动视口内容,或者使用橡皮筋选择多个项)。默认值 NoDrag
不做任何事情。
这种行为只影响没有被任何项目处理的鼠标点击。
访问函数:
QGraphicsView::DragMode dragMode() const
获取拖动模式void setDragMode(QGraphicsView::DragMode mode)
设置拖动模式
前景画刷(Foreground Brush)
此属性持有场景的前景画刷。 此属性为视图中的场景设置前景画刷。它用于覆盖场景自身的前景,并定义 drawForeground()
的行为。为了为此视图提供自定义前景绘制,你可以重新实现 drawForeground()
方法。
默认情况下,此属性包含一个带有 Qt::NoBrush
模式的画刷。
访问函数:
QBrush foregroundBrush() const
获取前景画刷void setForegroundBrush(const QBrush &brush)
设置前景画刷
交互性(Interactive)
此属性持有视图是否允许场景交互。 如果启用,此视图设置为允许场景交互。否则,此视图不允许交互,任何鼠标或键盘事件都将被忽略(即,它将表现为只读视图)。
默认情况下,此属性为 true
。
访问函数:
bool isInteractive() const
获取交互性void setInteractive(bool allowed)
设置交互性
性能优化标志(Optimization Flags)
可用于调整 QGraphicsView
性能的标志。 QGraphicsView
使用裁剪、额外的边界矩形调整和其他一些辅助手段来改善常见图形场景的渲染质量和性能。但是,根据目标平台、场景和正在使用的视口,其中一些操作可能会降低性能。
效果因标志而异;请参阅 OptimizationFlags
文档以获取详细信息。
默认情况下,没有启用任何优化标志。
此属性在 Qt 4.3 中被引入。
访问函数:
QGraphicsView::OptimizationFlags optimizationFlags() const
获取优化标志void setOptimizationFlags(QGraphicsView::OptimizationFlags flags)
设置优化标志
渲染提示(Render Hints)
此属性持有视图的默认渲染提示。 这些提示用于在每次可见项目绘制前初始化 QPainter
。QPainter
使用渲染提示来切换渲染特性,如抗锯齿和平滑位图变换。
默认情况下,QPainter::TextAntialiasing
是启用的。
访问函数:
QPainter::RenderHints renderHints() const
获取渲染提示void setRenderHints(QPainter::RenderHints hints)
设置渲染提示
重置锚点(Resize Anchor)
视图在重设大小时应该如何定位场景。 QGraphicsView
使用此属性来决定在视口小部件的大小改变时如何在视口中定位场景。默认行为 NoAnchor
在重设大小期间保持场景的位置不变;视图的左上角似乎被锚定。
注意,只有当场景的一部分可见(即,有滚动条)时,此属性的效果才明显。否则,如果整个场景适合视图,QGraphicsScene
使用视图对齐方式在视图中定位场景。
访问函数:
QGraphicsView::ViewportAnchor resizeAnchor() const
获取重置锚点void setResizeAnchor(QGraphicsView::ViewportAnchor anchor)
设置重置锚点
橡皮筋选择模式(Rubber Band Selection Mode)
此属性持有使用橡皮筋选择矩形选择项的行为。 此属性定义了使用 RubberBandDrag
拖动模式时如何选择项。
默认值是 Qt::IntersectsItemShape
;所有形状与橡皮筋相交或被橡皮筋包含的项都会被选中。
此属性在 Qt 4.3 中被引入。
访问函数:
Qt::ItemSelectionMode rubberBandSelectionMode() const
获取橡皮筋选择模式void setRubberBandSelectionMode(Qt::ItemSelectionMode mode)
设置橡皮筋选择模式
场景矩形(Scene Rect)
此属性持有此视图可视化的场景区域。 场景矩形定义了场景的范围,在视图的情况下,这意味着你可以使用滚动条导航的场景区域。
如果未设置,或者设置了一个空的 QRectF
,此属性具有与 QGraphicsScene::sceneRect
相同的值,并且随着 QGraphicsScene::sceneRect
改变。否则,视图的场景矩形不受场景影响。
默认情况下,此属性包含一个位于原点且宽度和高度为零的矩形。
访问函数:
QRectF sceneRect() const
获取场景矩形void setSceneRect(const QRectF &rect)
设置场景矩形void setSceneRect(qreal x, qreal y, qreal w, qreal h)
设置场景矩形坐标和尺寸
转换锚点(Transformation Anchor)
视图在转换期间应该如何定位场景。 QGraphicsView
使用此属性来决定当转换矩阵变化并且视图的坐标系统被转换时如何定位场景。默认行为 AnchorViewCenter
确保视图中心的场景点在转换期间保持不变(例如,旋转时,场景似乎围绕视图中心旋转)。
注意,只有当场景的一部分可见(即,有滚动条)时,此属性的效果才明显。否则,如果整个场景适合视图,QGraphicsScene
使用视图对齐方式在视图中定位场景。
访问函数:
QGraphicsView::ViewportAnchor transformationAnchor() const
获取转换锚点void setTransformationAnchor(QGraphicsView::ViewportAnchor anchor)
设置转换锚点
视口更新模式(Viewport Update Mode)
视口应该如何更新其内容。 QGraphicsView
使用此属性来决定如何更新已重新曝光或改变的场景区域。通常你不需要修改此属性,但在某些情况下这样做可以提高渲染性能。请参阅 ViewportUpdateMode
文档以获取具体细节。
默认值是 MinimalViewportUpdate
,在这种模式下,当内容改变时 QGraphicsView
将尽可能更新视口的最小区域。
此属性在 Qt 4.3 中被引入。
访问函数:
QGraphicsView::ViewportUpdateMode viewportUpdateMode() const
获取视口更新模式void setViewportUpdateMode(QGraphicsView::ViewportUpdateMode mode)
设置视口更新模式
下面是 QGraphicsView
成员函数的文档翻译:
构造与析构
QGraphicsView::QGraphicsView(QWidget *parent = nullptr)
构造一个 QGraphicsView
对象。parent
参数传递给 QWidget
的构造函数。
QGraphicsView::QGraphicsView(QGraphicsScene *scene, QWidget *parent = nullptr)
构造一个 QGraphicsView
并设置可视化场景为 scene
。parent
参数同样传递给 QWidget
的构造函数。
[virtual] QGraphicsView::~QGraphicsView()
析构 QGraphicsView
对象。
视图中心化
void QGraphicsView::centerOn(const QPointF &pos)
滚动视口的内容,确保场景坐标 pos
在视图中居中。由于 pos
是浮点坐标,而滚动条操作的是整数坐标,所以居中只是近似值。
void QGraphicsView::centerOn(qreal x, qreal y)
这是一个重载函数。相当于调用 centerOn(QPointF(x, y))
。
void QGraphicsView::centerOn(const QGraphicsItem *item)
这是一个重载函数。滚动视口的内容,确保 item
在视图中居中。
上下文菜单事件
[override virtual protected] void QGraphicsView::contextMenuEvent(QContextMenuEvent *event)
重写自 QAbstractScrollArea::contextMenuEvent()
。
拖放事件
[override virtual protected] void QGraphicsView::dragEnterEvent(QDragEnterEvent *event)
[override virtual protected] void QGraphicsView::dragLeaveEvent(QDragLeaveEvent *event)
[override virtual protected] void QGraphicsView::dragMoveEvent(QDragMoveEvent *event)
[virtual protected] void QGraphicsView::dropEvent(QDropEvent *event)
以上函数均为拖放事件的重写,分别对应拖放进入、离开、移动和释放事件。
背景绘制
[virtual protected] void QGraphicsView::drawBackground(QPainter *painter, const QRectF &rect)
使用 painter
绘制场景的背景,在任何项和前景绘制之前。如果只需要定义背景的颜色、纹理或渐变,可以调用 setBackgroundBrush()
。默认实现使用视图的背景画刷填充 rect
。
前景绘制
[virtual protected] void QGraphicsView::drawForeground(QPainter *painter, const QRectF &rect)
使用 painter
绘制场景的前景,在背景和所有项绘制之后。如果只需要定义前景的颜色、纹理或渐变,可以调用 setForegroundBrush()
。默认实现使用视图的前景画刷填充 rect
。
确保可见
void QGraphicsView::ensureVisible(const QRectF &rect, int xmargin = 50, int ymargin = 50)
滚动视口的内容使场景矩形 rect
可见,边距由 xmargin
和 ymargin
(默认为50像素)指定。
void QGraphicsView::ensureVisible(qreal x, qreal y, qreal w, qreal h, int xmargin = 50, int ymargin = 50)
这是重载函数,等价于调用 ensureVisible(QRectF(x, y, w, h), xmargin, ymargin)
。
void QGraphicsView::ensureVisible(const QGraphicsItem *item, int xmargin = 50, int ymargin = 50)
这是重载函数,滚动视口的内容使 item
的中心可见,边距由 xmargin
和 ymargin
(默认为50像素)指定。
事件处理
[override virtual protected] bool QGraphicsView::event(QEvent *event)
重写自 QAbstractScrollArea::event()
。
自适应视图
void QGraphicsView::fitInView(const QRectF &rect, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio)
缩放视图矩阵并滚动滚动条,确保场景矩形 rect
能够适配视口。如果 rect
不完全可见,会尽量显示其最大部分。通常在重写 resizeEvent()
时调用,以确保场景自动缩放以适应视口的新尺寸。
void QGraphicsView::fitInView(qreal x, qreal y, qreal w, qreal h, Qt::AspectRatioMode aspectRatioMode = ...)
这是重载函数,等价于调用 fitInView(QRectF(x, y, w, h), aspectRatioMode)
。
void QGraphicsView::fitInView(const QGraphicsItem *item, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio)
这是重载函数,确保 item
紧密地适应视图,根据 aspectRatioMode
缩放视图。
聚焦事件
[override virtual protected] void QGraphicsView::focusInEvent(QFocusEvent *event)
[override virtual protected] bool QGraphicsView::focusNextPrevChild(bool next)
[override virtual protected] void QGraphicsView::focusOutEvent(QFocusEvent *event)
[override virtual protected] void QGraphicsView::inputMethodEvent(QInputMethodEvent *event)
[override virtual] QVariant QGraphicsView::inputMethodQuery(Qt::InputMethodQuery query) const
以上函数均为聚焦相关事件的重写。
无效化场景
[slot] void QGraphicsView::invalidateScene(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = QGraphicsScene::AllLayers)
使 rect
内的层无效并安排重绘。任何 rect
内层的缓存内容无条件无效化并重绘。通常用于通知 QGraphicsView
场景背景的变化。
转换状态
bool QGraphicsView::isTransformed() const
如果视图被转换(即分配了非恒等变换或滚动条被调整)则返回 true
。
获取项
QGraphicsItem *QGraphicsView::itemAt(const QPoint &pos) const
返回 pos
位置的项,其中 pos
是视口坐标。如果有多个项在此位置,返回最顶层的项。
以下是 QGraphicsView
类的部分成员函数的翻译和说明:
获取指定位置的项
QGraphicsItem *QGraphicsView::itemAt(int x, int y) const
这是一个重载函数,它等同于调用 itemAt(QPoint(x, y))
。
获取所有项的列表
QList<QGraphicsItem *> QGraphicsView::items() const
返回一个包含与关联场景中的所有项的列表,按堆叠顺序降序排列(即,列表中的第一个项是最上层的项)。
获取指定位置的所有项
QList<QGraphicsItem *> QGraphicsView::items(const QPoint &pos) const
返回在视图中位置 pos
的所有项的列表。项按堆叠顺序降序列出。pos
是在视口坐标系中。
获取指定位置的项列表(整型坐标)
QList<QGraphicsItem *> QGraphicsView::items(int x, int y) const
此函数为了方便提供,等同于调用 items(QPoint(x, y))
。
获取指定矩形区域内的项
QList<QGraphicsItem *> QGraphicsView::items(const QRect &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
这是一个重载函数,返回所有根据 mode
要么被 rect
包含要么与之相交的项的列表。rect
是在视口坐标系中。
获取指定矩形区域内的项(整型坐标)
QList<QGraphicsItem *> QGraphicsView::items(int x, int y, int w, int h, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
这个便利函数等同于调用 items(QRectF(x, y, w, h), mode)
。
获取指定多边形区域内的项
QList<QGraphicsItem *> QGraphicsView::items(const QPolygon &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
这是一个重载函数,返回所有根据 mode
要么被 polygon
包含要么与之相交的项的列表。polygon
是在视口坐标系中。
获取指定路径区域内的项
QList<QGraphicsItem *> QGraphicsView::items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
这是一个重载函数,返回所有根据 mode
要么被 path
包含要么与之相交的项的列表。path
是在视口坐标系中。
键盘事件
[override virtual protected] void QGraphicsView::keyPressEvent(QKeyEvent *event)
[override virtual protected] void QGraphicsView::keyReleaseEvent(QKeyEvent *event)
这两个函数分别重写了键盘按键按下和释放事件。
从场景坐标映射到视口坐标
QPoint QGraphicsView::mapFromScene(const QPointF &point) const
QPolygon QGraphicsView::mapFromScene(const QRectF &rect) const
QPolygon QGraphicsView::mapFromScene(const QPolygonF &polygon) const
QPainterPath QGraphicsView::mapFromScene(const QPainterPath &path) const
QPoint QGraphicsView::mapFromScene(qreal x, qreal y) const
QPolygon QGraphicsView::mapFromScene(qreal x, qreal y, qreal w, qreal h) const
这些函数将场景坐标系中的点、矩形、多边形或路径映射到视口坐标系。
从视口坐标映射到场景坐标
QPointF QGraphicsView::mapToScene(const QPoint &point) const
QPolygonF QGraphicsView::mapToScene(const QRect &rect) const
QPolygonF QGraphicsView::mapToScene(const QPolygon &polygon) const
QPainterPath QGraphicsView::mapToScene(const QPainterPath &path) const
QPointF QGraphicsView::mapToScene(int x, int y) const
QPolygonF QGraphicsView::mapToScene(int x, int y, int w, int h) const
这些函数将视口坐标系中的点、矩形、多边形或路径映射到场景坐标系。
获取当前变换矩阵
QMatrix QGraphicsView::matrix() const
返回视图的当前变换矩阵。如果没有设置当前变换,则返回单位矩阵。
渲染视图到画设备
void QGraphicsView::render(QPainter *painter, const QRectF &target = QRectF(), const QRect &source = QRect(), Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio)
使用 painter
将源矩形(视图坐标系)从场景渲染到目标矩形(画设备坐标系)。此函数可用于捕获视图内容到画设备,如 QImage
(例如,截图),或者打印到 QPrinter
。
重置缓存内容
void QGraphicsView::resetCachedContent()
重置任何缓存的内容。调用此函数将清除 QGraphicsView
的缓存。
重置变换矩阵
void QGraphicsView::resetMatrix()
重置视图变换矩阵到单位矩阵。
旋转视图
void QGraphicsView::rotate(qreal angle)
顺时针旋转当前视图变换 angle
度。
其他事件和函数
[override virtual protected] void QGraphicsView::mouseDoubleClickEvent(QMouseEvent *event)
[override virtual protected] void QGraphicsView::mouseMoveEvent(QMouseEvent *event)
[override virtual protected] void QGraphicsView::mousePressEvent(QMouseEvent *event)
[override virtual protected] void QGraphicsView::mouseReleaseEvent(QMouseEvent *event)
[override virtual protected] void QGraphicsView::paintEvent(QPaintEvent *event)
[override virtual protected] void QGraphicsView::resizeEvent(QResizeEvent *event)
这些函数分别重写了鼠标双击、移动、按下、释放事件以及绘制和调整大小事件。
下面是 QGraphicsView
类部分成员函数的翻译及解释:
橡皮筋选择变化信号
[signal] void QGraphicsView::rubberBandChanged(QRect rubberBandRect, QPointF fromScenePoint, QPointF toScenePoint)
当橡皮筋选择矩形改变时,此信号会被发出。rubberBandRect
参数指定了视口中的矩形区域。拖动开始和结束位置由 fromScenePoint
和 toScenePoint
在场景坐标下给出。当橡皮筋选择结束时,此信号会带有空值发出。
获取橡皮筋选择矩形
QRect QGraphicsView::rubberBandRect() const
如果用户正在使用橡皮筋进行项目选择,此函数返回当前的橡皮筋区域(视口坐标)。如果用户没有使用橡皮筋,则返回一个空的 QRectF
。
缩放视图
void QGraphicsView::scale(qreal sx, qreal sy)
通过 (sx, sy)
对当前视图的变换进行缩放。
获取场景
QGraphicsScene *QGraphicsView::scene() const
返回当前在视图中可视化的场景的指针。如果没有场景正在显示,则返回 0
。
滚动内容
[override virtual protected] void QGraphicsView::scrollContentsBy(int dx, int dy)
重新实现 QAbstractScrollArea::scrollContentsBy()
函数。
设置矩阵
void QGraphicsView::setMatrix(const QMatrix &matrix, bool combine = false)
将视图的当前变换矩阵设置为 matrix
。如果 combine
为真,则 matrix
与当前矩阵组合;否则,matrix
替换当前矩阵。默认情况下 combine
为假。
设置优化标志
void QGraphicsView::setOptimizationFlag(QGraphicsView::OptimizationFlag flag, bool enabled = true)
如果 enabled
为真则启用 flag
;否则禁用 flag
。
设置渲染提示
void QGraphicsView::setRenderHint(QPainter::RenderHint hint, bool enabled = true)
如果 enabled
为真,则启用渲染提示 hint
;否则禁用它。
设置场景
void QGraphicsView::setScene(QGraphicsScene *scene)
将当前场景设置为 scene
。如果 scene
已经被查看,此函数不做任何事情。
设置变换
void QGraphicsView::setTransform(const QTransform &matrix, bool combine = false)
将视图的当前变换矩阵设置为 matrix
。如果 combine
为真,则 matrix
与当前矩阵组合;否则,matrix
替代当前矩阵。
设置视口
[override virtual protected slot] void QGraphicsView::setupViewport(QWidget *widget)
此槽函数在 QAbstractScrollArea::setViewport()
被调用后由 QAbstractScrollArea
调用。在 QGraphicsView
的子类中重写此函数来初始化新的视口小部件,在其使用之前。
剪切变换
void QGraphicsView::shear(qreal sh, qreal sv)
对当前视图变换应用剪切 (sh, sv)
。
显示事件
[override virtual protected] void QGraphicsView::showEvent(QShowEvent *event)
重新实现 QWidget::showEvent()
。
获取变换矩阵
QTransform QGraphicsView::transform() const
返回视图的当前变换矩阵。如果没有设置当前变换,则返回单位矩阵。
平移视图
void QGraphicsView::translate(qreal dx, qreal dy)
沿 (dx, dy)
方向平移当前视图变换。
更新场景
[slot] void QGraphicsView::updateScene(const QList<QRectF> &rects)
安排更新场景中的矩形列表 rects
。
更新场景矩形
[slot] void QGraphicsView::updateSceneRect(const QRectF &rect)
通知 QGraphicsView
场景的场景矩形已更改。rect
是新的场景矩形。如果视图已经显式设置了场景矩形,此函数不做任何事情。
视口事件
[override virtual protected] bool QGraphicsView::viewportEvent(QEvent *event)
重新实现 QAbstractScrollArea::viewportEvent()
。
获取视口变换矩阵
QTransform QGraphicsView::viewportTransform() const
返回一个将场景坐标映射到视口坐标的矩阵。
轮播事件
[override virtual protected] void QGraphicsView::wheelEvent(QWheelEvent *event)
重新实现 QAbstractScrollArea::wheelEvent()
。
以上函数和信号提供了 QGraphicsView
中用于操作场景、变换、事件处理、优化和渲染等功能的方法。它们允许开发者定制和控制视图的行为,包括但不限于缩放、旋转、平移、剪切、优化渲染性能以及响应用户的输入事件。