QGraphcisView 官方文档翻译

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_MININT_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()。这些函数允许你在视图坐标和场景坐标之间映射点、矩形、多边形和路径,并使用视图坐标查找场景上的元素。

更多相关信息,请参阅 QGraphicsSceneQGraphicsItemQGraphicsSceneEvent

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
    值:1
    QGraphicsView 将确定需要重绘的最小视口区域,通过避免未更改区域的重绘,最大限度地减少绘制时间。这是 QGraphicsView 的默认模式。虽然这种方法通常提供了最佳性能,但如果场景中有许多小的可见变化,QGraphicsView 可能会花费更多的时间寻找最小方法而不是实际绘制。

  • QGraphicsView::SmartViewportUpdate
    值:2
    QGraphicsView 将尝试通过分析需要重绘的区域来找到最优的更新模式。

  • 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)

此属性持有视图的默认渲染提示。 这些提示用于在每次可见项目绘制前初始化 QPainterQPainter 使用渲染提示来切换渲染特性,如抗锯齿和平滑位图变换。

默认情况下,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 并设置可视化场景为 sceneparent 参数同样传递给 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 可见,边距由 xmarginymargin(默认为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 的中心可见,边距由 xmarginymargin(默认为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 参数指定了视口中的矩形区域。拖动开始和结束位置由 fromScenePointtoScenePoint 在场景坐标下给出。当橡皮筋选择结束时,此信号会带有空值发出。

获取橡皮筋选择矩形

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 中用于操作场景、变换、事件处理、优化和渲染等功能的方法。它们允许开发者定制和控制视图的行为,包括但不限于缩放、旋转、平移、剪切、优化渲染性能以及响应用户的输入事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值