- class QGraphicsScene#
QGraphicsScene
类提供了一个用于管理大量 2D 图形项的表面。 更多...概要#
属性#
backgroundBrush
- 场景的背景画刷bspTreeDepth
- QGraphicsScene 的 BSP 索引树的深度focusOnTouch
- 当接收到触摸开始事件时,项是否获得焦点font
- 场景的默认字体foregroundBrush - 场景的前景画刷
itemIndexMethod - 项目索引方法
minimumRenderSize - 项目必须具有的最小视图变换大小,以便绘制
palette - 场景的默认调色板
sceneRect - 场景矩形;场景的边界矩形
stickyFocus - 是否点击进入场景背景会清除焦点
方法#
def __init__()
def activePanel()
def activeWindow()
def addEllipse()
def addItem()
def addLine()
def addPath()
def addPixmap()
def addPolygon()
def addRect()
def addSimpleText()
def addText()
def addWidget()
def bspTreeDepth()
定义
clearFocus()
定义
focusItem()
定义
font()
定义
hasFocus()
定义
height()
定义
invalidate()
定义
isActive()
定义
itemAt()
定义
items()
定义
palette()
定义
removeItem()
定义
render()
定义
sceneRect()
定义
sendEvent()
定义
setFocus()
定义
setFont()
定义
setPalette()
定义
setStyle()
定义
style()
定义
update()
定义
views()
定义
width()
虚方法#
定义
dropEvent()
定义
helpEvent()
定义
wheelEvent()
槽函数#
定义
advance()
定义
clear()
定义
invalidate()
定义
update()
信号#
注意
此文档可能包含从C++自动转换为Python的片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译有问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建工单来让我们知道。
详细说明#
警告
本节包含从C++自动转换为Python的片段,可能包含错误。
此类用作QGraphicsItems的容器。它通常与
QGraphicsView
一起使用,用于在2D平面上可视化图形项,例如线条、矩形、文本,甚至自定义项。QGraphicsScene
是 Graphics View Framework 的一部分。QGraphicsScene
还提供功能,让您高效地确定项的位置,以及在场景中的任意区域可见的项。通过QGraphicsView
小部件,您可以可视化整个场景,或者放大查看场景的某部分。示例
scene = QGraphicsScene() scene.addText("Hello, world!") view = QGraphicsView(scene) view.show()
请注意,
QGraphicsScene
没有自己可见的外观;它仅管理项。您需要创建一个QGraphicsView
小部件来可视化场景。要将项目添加到场景中,您首先需要构造一个
QGraphicsScene
对象。然后,您有两个选择:一是通过调用addItem()
将现有的QGraphicsItem
对象添加到场景中,或者调用便利函数之一,如addEllipse()
,addLine()
,addPath()
,addPixmap()
,addPolygon()
,addRect()
或addText()
,所有这些函数都返回新添加的项目指针。这些函数添加的项目的尺寸相对于项目的坐标系,并且在场景中初始化项目的位置为 (0, 0)。然后,您可以使用
QGraphicsView
可视化场景。当场景发生变化时(例如,当项目移动或变换时),QGraphicsScene
会发出changed()
信号。要删除一个项目,调用removeItem()
。QGraphicsScene
使用索引算法有效地管理项目的位置。默认情况下,使用 BSP(二叉空间分割)树;这是一种适用于大型场景的算法,其中大多数项目保持静态(即不移动)。您可以通过调用setItemIndexMethod()
来选择禁用此索引。有关可用的索引算法的更多信息,请参阅itemIndexMethod
属性。场景的边界矩形是通过调用
setSceneRect()
来设置的。可以将在场景的任意位置放置项,并且场景的大小默认是无限大的。场景矩形仅用于内部簿记,用于保持场景项索引。如果场景矩形未设置,QGraphicsScene
将使用itemsBoundingRect()
返回的所有项的边界区域作为场景矩形。然而,itemsBoundingRect()
是一个相对耗时的函数,因为它需要对场景上的每个项收集位置信息。因此,在处理大型场景时,应始终设置场景矩形。QGraphicsScene
最强的功能之一是能够高效地确定项的位置。即使在场景上有数百万个项,items()
函数也可以在几毫秒内确定项的位置。有几种items()
的重载:一种是找到某个位置的项,一种是找到在多边形或矩形内或与其相交的项,等等。返回的项列表按堆叠顺序排序,最上面的项是列表中的第一项。为了方便,还有一个itemAt()
函数,它返回给定位置的顶层项。QGraphicsScene
维护场景的选择信息。要选择项,请调用setSelectionArea()
,要清除当前选择,请调用clearSelection()
。通过调用selectedItems()
获取所有选中项的列表。事件处理和传播#
QGraphicsScene
还有一个职责,就是将QGraphicsView
发生的事件传播出去。要向场景发送事件,你需要构建一个继承自 QEvent 的事件,然后使用,例如,QCoreApplication::sendEvent() 来发送它。event()
负责将事件分发给各个项目。一些常用的事件由便利的事件处理器来处理。例如,按键事件由keyPressEvent()
处理,而鼠标按键事件由mousePressEvent()
处理。按键事件会被发送到 焦点项目。要设置焦点项目,你可以调用
setFocusItem()
并传入一个可以接受焦点的项目,或者项目本身可以调用setFocus()
。调用focusItem()
来获取当前焦点项目。为了与控件兼容,场景也维护了自己的焦点信息。默认情况下,场景没有焦点,所有按键事件都被丢弃。如果调用setFocus()
,或者场景上的项目获取了焦点,场景将自动获得焦点。如果场景有焦点,hasFocus()
将返回 true,如果有焦点项目,则按键事件将被转发到该项目。如果场景失去焦点(即某人调用clearFocus()
),而一个项目有焦点,场景将保持其项目焦点信息,并且一旦场景恢复焦点,将确保最后焦点项目重新获得焦点。对于鼠标悬停效果,
QGraphicsScene
分发 悬停事件。如果一个项目接受悬停事件(参见acceptHoverEvents()
),当鼠标进入其区域时,它将收到 GraphicsSceneHoverEnter 事件。当鼠标继续在项目区域内部移动时,QGraphicsScene
将发送 GraphicsSceneHoverMove 事件。当鼠标离开项目区域时,该项目将收到 GraphicsSceneHoverLeave 事件。所有鼠标事件都传递给当前的 鼠标捕获器 项目。一个项目成为场景的鼠标捕获器,如果它接受鼠标事件(参见
acceptedMouseButtons()
)并且它接收到鼠标按下。在没有其他鼠标按钮按下的情况下接收鼠标释放时,它保持鼠标捕获器的状态。您可以通过调用mouseGrabberItem()
来确定当前哪个项目正在捕获鼠标。- classItemIndexMethod#
此枚举描述了
QGraphicsScene
为管理场景中项目位置信息提供索引算法。常量
描述
QGraphicsScene.BspTreeIndex
应用二叉空间分割树。所有
QGraphicsScene
的项目位置算法都是接近对数复杂度的,通过使用二分搜索。添加、移动和删除项目是逻辑的。这种方法最适合静态场景(即,大多数项目不移动的场景)。QGraphicsScene.NoIndex
不应用索引。项目位置是线性的,因为搜索场景上的所有项目。然而,添加、移动和删除项目却是在常量时间内完成的。这种方法最适合动态场景,其中不断添加、移动或删除许多项目。
- classSceneLayer#
(继承自
enum.Flag
) 此枚举描述了QGraphicsScene
中的渲染层。当QGraphicsScene
绘制场景内容时,它按顺序单独渲染这些层。每个层代表一个在调用如
invalidate()
或invalidateScene()
等函数时可以进行逻辑或操作的标志。常量
描述
QGraphicsScene.ItemLayer
物品层。通过调用虚函数drawItems(),
QGraphicsScene
在此层渲染所有物品。物品层在背景层之后、前景层之前被绘制。QGraphicsScene.BackgroundLayer
背景层。
QGraphicsScene
通过调用虚函数drawBackground()
在此层渲染场景的背景。背景层是所有层中首先绘制的。QGraphicsScene.ForegroundLayer
前景层。
QGraphicsScene
通过调用虚函数drawForeground()
在此层渲染场景的前景。前景层是所有层中最后绘制的。QGraphicsScene.AllLayers
所有层;该值代表所有三层的组合。
注意
当使用了
from __feature__ import true_property
时,属性可以直接使用;否则通过访问器函数使用。警告
本节包含从C++自动转换为Python的片段,可能包含错误。
此属性持有场景的背景刷。
设置此属性可以将场景背景更改为不同的颜色、渐变或纹理。默认背景刷是Qt::NoBrush。背景在物品之前(在其后面)绘制。
示例
scene = QGraphicsScene() view = QGraphicsView(scene) view.show() # a blue background scene.setBackgroundBrush(Qt.blue) # a gradient background gradient = QRadialGradient(0, 0, 10) gradient.setSpread(QGradient.RepeatSpread) scene.setBackgroundBrush(gradient)
render()
调用drawBackground()
来绘制场景背景。为了更详细地控制背景的绘制方式,您可以在QGraphicsScene
的子类中重写drawBackground()
函数。- 属性bspTreeDepth: int#
警告
本节包含从C++自动转换为Python的片段,可能包含错误。
此属性持有
QGraphicsScene
的 BSP 索引树的深度。当使用
NoIndex
时,此属性无效。此值确定
QGraphicsScene
的BSP树深度。深度直接影响到QGraphicsScene
的性能和内存使用;后者随着树深度的增加呈指数增长。在最佳树深度下,即使在成千上万项的场景中,QGraphicsScene
也可以快速确定项的局部性。这也极大地提升了渲染性能。默认情况下,此值为0,此时Qt将根据场景中项的大小、位置和数量猜测一个合理的默认深度。然而,如果这些参数频繁变化,那么您可能会在
QGraphicsScene
内部调整深度时遇到性能下降。您可以通过设置此属性来固定树深度,从而避免潜在的延迟。树深度和场景矩形大小决定了场景划分的粒度。每个场景段的尺寸由以下算法确定
segmentSize = sceneRect().size() / pow(2, depth - 1)
BSP树在每个段包含0到10个项时达到最佳大小。
另请参阅
- 属性focusOnTouch: 布尔值#
此属性表示是否在接收touch begin事件时项获得焦点。
通常仅在项被点击时才传递焦点。触摸板的轻触通常被操作系统解释为等价于鼠标点击,并产生一个合成的点击事件。但是,至少在macOS上,您可以配置此行为。
默认情况下,
QGraphicsScene
在触摸板或类似设备上也会传递焦点。如果操作系统配置为在触摸板轻触时不会生成合成的鼠标点击,这可能会令人惊讶。如果操作系统在触摸板轻触时生成合成的鼠标点击,则在触摸手势开始时传递焦点是不必要的。关闭focusOnTouch后,
QGraphicsScene
的行为与在macOS上预期一致。默认值为
true
,确保默认行为与Qt 5.12之前版本相同。设置为false
可以防止触摸事件触发焦点改变。此属性保存场景的默认字体。
此属性提供场景的字体。场景字体默认为,并从
font
中解析所有其条目。如果场景的字体发生更改,无论是通过 setFont() 直接更改还是当应用程序字体间接更改时,
QGraphicsScene
首先发送自身一个 FontChange 事件,然后向场景中所有顶级小部件项发送 FontChange 事件。这些项通过将它们自己的字体解析到场景来响应,然后再通知它们的子项,依此类推,直到所有小部件项都已更新其字体。更改场景字体(直接或通过
setFont()
间接),将自动安排整个场景的重绘。警告
本节包含从C++自动转换为Python的片段,可能包含错误。
此属性保存场景的前景色笔刷。
更改此属性以将场景的前景色设置为不同的颜色、渐变或纹理。
前景在项目之后(在项目之上)绘制。默认前景笔刷是 Qt::NoBrush(即不绘制前景)。
示例
scene = QGraphicsScene() view = QGraphicsView(scene) view.show() # a white semi-transparent foreground scene.setForegroundBrush(QColor(255, 255, 255, 127)) # a grid foreground scene.setForegroundBrush(QBrush(Qt.lightGray, Qt.CrossPattern))
render()
调用drawForeground()
来绘制场景前景。为了更详细地控制前景的绘制,您可以在QGraphicsScene
子类中重新实现drawForeground()
函数。- 属性 itemIndexMethod: QGraphicsScene.ItemIndexMethod#
此属性保存项目索引方法。
QGraphicsScene
会将索引算法应用于场景,以加快像items()
和itemAt()
这样的物品发现函数。索引在静态场景(即物品不会移动的场景)中效率最高。对于动态场景或包含许多动画物品的场景,索引维护可能会超过快速查找的优势。对于常见情况,默认索引方法
BspTreeIndex
工作良好。如果您的场景使用了许多动画且您遇到速度较慢的问题,您可以通过调用setItemIndexMethod(NoIndex)
来禁用索引。另请参阅
- 属性 minimumRenderSize: float#
此属性存储一个物品必须具有的最小视图变换大小,以便被绘制。
当场景被绘制时,任何其宽度或高度转换为目标视图后小于 minimumRenderSize() 的物品将不会被绘制。如果一个物品没有被绘制,并且它剪贴了其子物品,它们也将不会绘制。通过设置此值可以加快在放缩后的视图中进行的许多物体绘制的场景的渲染速度。
默认值为 0。如果没有设置,或者设置为 0 或负值,则所有物品将始终被绘制。
例如,设置此属性在场景由多个视图渲染时特别有用,其中一个视图作为概览图,始终显示所有物品。在包含许多物品的场景中,此类视图将使用高放大系数,以便显示所有物品。由于放大,较小的物品对最终渲染场景的贡献微乎其微。为了避免绘制这些物品并减少渲染场景所需的时间,您可以调用具有非负值的 setMinimumRenderSize()。
注意
由于太小而不绘制的物品仍然由诸如
items()
和itemAt()
之类的方 法返回,并参与碰撞检测和交互。建议您将 minimumRenderSize() 设置为小于或等于 1 的值,以避免大型未被绘制的交互式物品。此属性存储场景的默认调色板。
该属性提供了场景调色板。场景调色板默认从
palette
中获取。如果场景调色板发生变化,无论是通过 setPalette() 直接更改,还是通过应用程序调色板间接更改,QGraphicsScene 首先会发送 itself 一个 PaletteChange 事件,然后向场景中的所有顶层小部件发送 PaletteChange 事件。这些小部件会通过将其自己的调色板解析到场景中来响应,然后通知其子项,子项再次通知子项,以此类推,直到所有小部件都已更新其调色板。
更改场景调色板(直接或通过 setPalette() 间接更改),将自动安排整个场景的重绘。
另请参阅
- 访问函数
该属性保存场景矩形;场景的边界矩形。
场景矩形定义了场景的范围。它主要被 QGraphicsView 用来自定义视图的默认可滚动区域,以及由 QGraphicsScene 来管理项目索引。
如果没有设置,或者设置了为 null 的 QRectF,sceneRect() 将返回自场景创建以来所有项目在场景中的最大边界矩形(即当项目添加到场景或移动时增长,但从不缩小)。
- property stickyFocus: bool#
该属性保存了是否单击场景背景会清除焦点。
当
QGraphicsScene
对象的 stickyFocus 属性设置为 true 时,用户单击场景背景或不可接受焦点的项时,焦点将保持不变。否则,焦点将被清除。默认情况下,该属性为
false
。焦点变化是鼠标点击的结果。您可以在
mousePressEvent()
中重写QGraphicsScene
的子类,以根据用户点击的位置切换该属性。使用
sceneRect
作为其场景矩形来构造一个QGraphicsScene
对象。参数parent
被传递给 QObject 的构造函数。另请参阅
- __init__([parent=None])
- 参数:
parent –
QObject
构造一个
QGraphicsScene
对象。参数parent
被传递给 QObject 的构造函数。- __init__(x, y, width, height[, parent=None])
- 参数:
x – float
y – float
width – float
height – float
parent –
QObject
使用由 (
x
,y
) 指定的矩形以及给定的width
和height
作为其场景矩形来构造一个QGraphicsScene
对象。参数parent
被传递给 QObject 的构造函数。另请参阅
- activePanel()#
- 返回类型:
返回当前活动面板,如果没有活动面板则返回
None
。另请参阅
- activeWindow()#
- 返回类型:
返回当前活动窗口,如果没有活动窗口则返回
None
。另请参阅
- addEllipse(rect[, pen=QPen()[, brush=QBrush()]])#
- 参数:
- 返回类型:
在场景中创建并添加一个椭圆项,并返回项指针。椭圆的几何形状由
rect
定义,其画笔和画刷初始化为pen
和brush
。注意,项的几何形状是在项坐标中提供的,并且其位置初始化为 (0, 0)。
如果项是可见的(即,
isVisible()
返回true
),在控制返回到事件循环后,QGraphicsScene
将发出changed()
信号。- addEllipse(x, y, w, h[, pen=QPen()[, brush=QBrush()]])
- 参数:
- 返回类型:
该便捷函数等同于调用
addEllipse
(QRectF(x
,y
,w
,h
),pen
,brush
).- addItem(item)#
- 参数:
item –
QGraphicsItem
将
item
及其所有子项添加到此场景中。此场景将拥有item
的所有权。如果项是可见的(即,
isVisible()
返回true),当控制权回到事件循环时,QGraphicsScene
将发出changed()
事件。如果项已在其他场景中,它将先从其旧场景中移除,然后作为顶级项添加到此场景中。
当项被添加到场景中时,
QGraphicsScene
会向item
发送ItemSceneChange通知。如果项目前不属于任何场景,则只发送一条通知。如果它已经属于场景(即,被移动到该场景),当项从其先前场景中移除时,QGraphicsScene
将发送附加通知。如果项是面板、场景处于激活状态且场景中没有活动面板,则该项将被激活。
- addLine(line[, pen=QPen()])#
- 参数:
- 返回类型:
创建并添加一个线项到场景中,并返回项指针。线的几何形状由
line
定义,其画笔初始化为pen
。注意,项的几何形状是在项坐标中提供的,并且其位置初始化为 (0, 0)。
如果项是可见的(即,
isVisible()
返回true
),在控制返回到事件循环后,QGraphicsScene
将发出changed()
信号。- addLine(x1, y1, x2, y2[, pen=QPen()])
- 参数:
x1 – float
y1 – float
x2 – float
y2 – float
pen –
QPen
- 返回类型:
此便捷函数等价于调用
addLine
(QLineF(x1
,y1
,x2
,y2
),pen
))。- addPath(path[, pen=QPen()[, brush=QBrush()]])#
- 参数:
path –
QPainterPath
pen –
QPen
brush –
QBrush
- 返回类型:
创建并添加路径项到场景,并返回项指针。路径的几何形状由
path
定义,其笔和刷初始化为pen
和brush
。注意,项的几何形状是在项坐标中提供的,并且其位置初始化为 (0, 0)。
如果项是可见的(即,
isVisible()
返回true
),在控制返回到事件循环后,QGraphicsScene
将发出changed()
信号。创建并添加位图到场景,并返回项指针。位图由
pixmap
定义。注意,项的几何形状是在项坐标中提供的,并且其位置初始化为 (0, 0)。
如果项是可见的(即,
isVisible()
返回true
),在控制返回到事件循环后,QGraphicsScene
将发出changed()
信号。- addPolygon(polygon[, pen=QPen()[, brush=QBrush()]])#
- 参数:
- 返回类型:
创建并将其添加到场景中的多边形项,并返回项指针。多边形由
polygon
定义,其笔和画笔初始化为pen
和brush
。注意,项的几何形状是在项坐标中提供的,并且其位置初始化为 (0, 0)。
如果项是可见的(即,
isVisible()
返回true
),在控制返回到事件循环后,QGraphicsScene
将发出changed()
信号。- addRect(rect[, pen=QPen()[, brush=QBrush()]])#
- 参数:
- 返回类型:
创建并将其添加到场景中的矩形项,并返回项指针。矩形的几何形状由
rect
定义,其笔和画笔初始化为pen
和brush
。请注意,项的几何形状使用项坐标提供,其位置初始化为 (0, 0)。例如,如果添加 QRect(50, 50, 100, 100),则其左上角相对于项的坐标系原点将位于 (50, 50)。
如果项是可见的(即,
isVisible()
返回true
),在控制返回到事件循环后,QGraphicsScene
将发出changed()
信号。- addRect(x, y, w, h[, pen=QPen()[, brush=QBrush()]])
- 参数:
- 返回类型:
此便捷函数等价于调用
addRect
(QRectF(x, y, w, h), pen, brush)。创建并添加一个
QGraphicsSimpleTextItem
到场景中,并返回项目指针。文本字符串被初始化为text
,其字体被初始化为font
。项目位置被初始化为 (0, 0)。
如果项是可见的(即,
isVisible()
返回true
),在控制返回到事件循环后,QGraphicsScene
将发出changed()
信号。创建并添加文本项目到场景中,并返回项目指针。文本字符串被初始化为
text
,其字体被初始化为font
。项目位置被初始化为 (0, 0)。
如果项是可见的(即,
isVisible()
返回true
),在控制返回到事件循环后,QGraphicsScene
将发出changed()
信号。- addWidget(widget[, wFlags=Qt.WindowFlags()])#
- 参数:
widget –
QWidget
wFlags –
WindowType
的组合
- 返回类型:
为
widget
创建一个新的QGraphicsProxyWidget
,将其添加到场景中,并返回代理的指针。wFlags
设置嵌入代理小部件的默认窗口标志。项目位置被初始化为 (0, 0)。
如果项是可见的(即,
isVisible()
返回true
),在控制返回到事件循环后,QGraphicsScene
将发出changed()
信号。注意,Qt::WA_PaintOnScreen 小部件属性被设置为和封装外部应用程序或控制器的工具小部件不支持。例如:QOpenGLWidget 和 QAxWidget。
- advance()#
此槽通过调用场景上所有项目的
advance()
函数使场景前进一步。这分两个阶段完成:在第一阶段,所有项目都会接到通知场景即将更改;在第二阶段,所有项目都会接到可以移动的通知。在第一阶段,传递值 0 给advance()
,在第二阶段传递值 1。请注意,您还可以使用动画框架进行动画。
- backgroundBrush()#
- 返回类型:
另请参阅
属性
backgroundBrushᅟ
的获取器。- bspTreeDepth()#
- 返回类型:
int
另请参阅
属性
bspTreeDepthᅟ
的获取器。- changed(region)#
- 参数:
region – .list of QRectF
此信号由
QGraphicsScene
在达到事件循环时发出,如果场景内容发生变化。参数region
包含一系列场景矩形,指示已更改的区域。另请参阅
- clear()#
从场景中删除并删除所有项,但保留场景的其余状态。
另请参阅
- clearFocus()#
清除场景中的焦点。如果在调用此函数时任何项有焦点,它将会失去焦点,并再次在场景获得焦点时重新获得焦点。
没有焦点的场景会忽略按键事件。
- clearSelection()#
清除当前选择。
- collidingItems(item[, mode=Qt.IntersectsItemShape])#
- 参数:
item –
QGraphicsItem
mode –
ItemSelectionMode
- 返回类型:
.list of QGraphicsItem
返回与
item
发生碰撞的所有项列表。碰撞是通过调用collidesWithItem()
来确定的;碰撞检测由mode
确定。默认情况下,返回所有与item
形状相交或包含在item
形状内的项。项按降序堆叠顺序返回(即列表中的第一个项是上层的项,最后一个项是下层的项)。
另请参阅
- contextMenuEvent(event)#
- 参数:
event –
QGraphicsSceneContextMenuEvent
此事件处理程序,针对
contextMenuEvent
事件,可以在子类中重新实现以接收上下文菜单事件。默认实现将事件转发到接受上下文菜单事件的最顶层可见项,其位置为事件的位置。如果没有项在此位置接受上下文菜单事件,则事件将被忽略。注意:有关此函数认为哪些项是可见的,请参阅
items()
的定义。另请参阅
- createItemGroup(items)#
- 参数:
items – .QGraphicsItem 列表
- 返回类型:
将
items
中的所有项组合到一个新的QGraphicsItemGroup
中,并返回指向组的指针。组以items
的共同祖先作为其父级,以及位置(0,0)创建。所有项都被重新绑定到组,它们的位置和转换映射到组。如果items
为空,该函数将返回一个空的顶层QGraphicsItemGroup
。QGraphicsScene
拥有组项的所有权;您不需要删除它。要解散(取消分组)一个组,请调用destroyItemGroup()
.- destroyItemGroup(group)#
- 参数:
group –
QGraphicsItemGroup
将
group
中的所有对象重新归到其父对象,然后从场景中删除group
,最后删除它。对象的定位和变换从组映射到组的父对象。- dragEnterEvent(event)#
- 参数:
event –
QGraphicsSceneDragDropEvent
此事件处理程序,为事件
event
,可在子类中重写以接收场景的拖入事件。默认实现接受事件并准备场景接受拖动移动事件。
- dragLeaveEvent(event)#
- 参数:
event –
QGraphicsSceneDragDropEvent
此事件处理程序,为事件
event
,可在子类中重写以接收场景的拖出事件。- dragMoveEvent(event)#
- 参数:
event –
QGraphicsSceneDragDropEvent
此事件处理器处理
event
事件,可以在子类中重新实现以接收场景的拖动移动事件。注意:有关此函数认为哪些项是可见的,请参阅
items()
的定义。使用
painter
绘制场景的背景,在绘制任何项和前景之前。重新实现此函数以提供场景的自定义背景。所有绘制都在 scene 坐标系中完成。参数
rect
是暴露的矩形。如果您只想定义背景的颜色、纹理或渐变,可以直接调用
setBackgroundBrush()
。另请参阅
drawForeground()
drawItems()
使用
painter
绘制场景的前景,在背景和所有项目绘制之后。重新实现此函数以提供场景的自定义前景。所有绘制都在 scene 坐标系中完成。参数
rect
是暴露的矩形。如果您只想定义前景的颜色、纹理或渐变,可以直接调用
setForegroundBrush()
。另请参阅
drawBackground()
drawItems()
- dropEvent(event)#
- 参数:
event –
QGraphicsSceneDragDropEvent
此事件处理器处理
event
事件,可以在子类中重新实现以接收场景的放下事件。- focusInEvent(event)#
- 参数:
event –
QFocusEvent
此事件处理程序,用于
focusEvent
事件,可以在子类中重写以接收焦点事件。默认实现将焦点放在场景上,然后是最后一个焦点项。
另请参阅
- focusItem()#
- 返回类型:
当场景为活动状态时,此函数返回场景的当前焦点项,或者
None
(如果没有项目当前具有焦点)。当场景不为活动状态时,此函数返回当场景变为活动状态时将获得输入焦点的项目。焦点项在场景接收到键事件时接收键盘输入。
- focusItemChanged(newFocus, oldFocus, reason)#
- 参数:
newFocus –
QGraphicsItem
oldFocus –
QGraphicsItem
reason –
FocusReason
此信号由
QGraphicsScene
在场景中焦点变化时发出(即项目获得或失去输入焦点,或当一个项目的焦点传递到另一个项目时)。如果您需要跟踪其他项目何时获得输入焦点,可以连接到该信号。这对于实现虚拟键盘、输入方法和光标项特别有用。oldFocusItem
是之前有焦点的项目的指针,或信号发出前没有项目有焦点时为0。newFocusItem
是获得输入焦点的项目的指针,如果焦点丢失则None
。reason
表示焦点变化的原因(例如,如果场景在输入字段有焦点时被禁用,oldFocusItem
将指向输入字段项目,newFocusItem
将是None
,并且reason
将是 Qt::ActiveWindowFocusReason)。- focusNextPrevChild(next)#
- 参数:
next – bool
- 返回类型:
bool
查找合适的新的小部件给予键盘焦点,如 Tab 和 Shift+Tab,如果找到新的小部件返回
true
,否则返回 false。如果next
是 true,则此函数将向前搜索;如果next
是 false,则它将向后搜索。您可以在
QGraphicsScene
的子类中重新实现此函数,以提供对您场景中 Tab 焦点传递的精细控制。默认实现基于由setTabOrder()
定义的 tab 焦点链。- focusOnTouch()#
- 返回类型:
bool
另请参阅
属性
focusOnTouch
的获取器。- focusOutEvent(event)#
- 参数:
event –
QFocusEvent
这个事件处理器,用于处理
focusEvent
事件,可以由子类重新实现来接收焦点丢失事件。默认实现从任何焦点项目移除焦点,然后从场景中移除焦点。
另请参阅
属性
font
的获取器。- foregroundBrush()#
- 返回类型:
另请参阅
属性
foregroundBrush
的获取器。- hasFocus()#
- 返回类型:
bool
如果场景具有焦点,则返回
true
;否则返回false
。如果场景具有焦点,它将把按键事件从 QKeyEvent 传递给任何具有焦点的项目。另请参阅
- 高度()#
- 返回类型:
浮点数
此便捷函数等同于调用
sceneRect().height()
。另请参阅
- helpEvent(event)#
- 参数:
此事件处理程序,对于事件
helpEvent
,可以在子类中重新实现来接收帮助事件。该事件为 QEvent::ToolTip 类型,当请求工具提示时创建。默认实现在鼠标光标位置显示最顶层可见项目的工具提示,即具有最高 z 值的项目。如果没有项目设置了工具提示,此函数不执行任何操作。
注意:有关此函数认为哪些项是可见的,请参阅
items()
的定义。- inputMethodEvent(event)#
- 参数:
事件 –
QInputMethodEvent
此事件处理程序,对于事件
event
,可以在子类中重新实现来接收场景的输入方法事件。默认实现将事件转发到
focusItem()
。如果没有项目当前具有焦点,或者当前焦点项目不接受输入方法,此函数不执行任何操作。另请参阅
- inputMethodQuery(query)#
- 参数:
查询 –
InputMethodQuery
- 返回类型:
对象
此方法由输入法用于查询场景的一组属性,以便能够支持复杂输入法操作,如支持周围文本和重构。
query
参数指定查询哪个属性。另请参阅
- invalidate([rect=QRectF()[, layers=QGraphicsScene.SceneLayer.AllLayers]])#
- 参数:
rect –
QRectF
layers – 组合
SceneLayer
警告
本节包含从C++自动转换为Python的片段,可能包含错误。
在场景中使
rect
中的layers
无效并安排重新绘制。在layers
中的任何缓存内容都将无条件地失效并重新绘制。您可以使用此函数重载来通知
QGraphicsScene
场景的背景或前景已更改。此函数通常用于具有基于瓦片的背景的场景,在QGraphicsView
启用CacheBackground
时通知更改。示例
def rectForTile(self, int x, int y): # Return the rectangle for the tile at position (x, y). return QRectF(x * tileWidth, y * tileHeight, tileWidth, tileHeight) def setTile(self, x, y, pixmap): # Sets or replaces the tile at position (x, y) with pixmap. if x >= 0 and x < numTilesH and y >= 0 and y < numTilesV: tiles[y][x] = pixmap invalidate(rectForTile(x, y), BackgroundLayer) def drawBackground(self, painter, exposed): # Draws all tiles that intersect the exposed area. for y in range(0, numTilesV): for x in range(0, numTilesH): rect = rectForTile(x, y) if exposed.intersects(rect): painter.drawPixmap(rect.topLeft(), tiles[y][x])
请注意,
QGraphicsView
目前仅支持背景缓存(见CacheBackground
)。如果传入了除BackgroundLayer
之外的其他任何层,则此函数与调用update()
等效。另请参阅
- invalidate(x, y, w, h[, layers=QGraphicsScene.SceneLayer.AllLayers])
- 参数:
x – float
y – float
宽(w) - 浮点数
高(h) - 浮点数
layers – 组合
SceneLayer
这是一个重载函数。
此便利函数等效于调用 invalidate(QRectF(x, y, w, h), layers);
- isActive()#
- 返回类型:
bool
如果场景是活动的(例如,至少有一个活动的
QGraphicsView
正在查看),则返回true
;否则返回false
。- itemAt(pos, deviceTransform)#
- 参数:
pos –
QPointF
deviceTransform –
QTransform
- 返回类型:
返回指定位置的顶端可见项,如果该位置没有项,则返回
None
。deviceTransform
是应用于视图的转换,如果场景包含忽略变换的项,则需要提供。注意:有关此函数认为哪些项是可见的,请参阅
items()
的定义。另请参阅
items()
collidingItems()
Sorting
- itemAt(x, y, deviceTransform)
- 参数:
x – float
y – float
deviceTransform –
QTransform
- 返回类型:
这是一个重载函数。
返回指定位置(
x
,y
)的顶端可见项,如果该位置没有项,则返回None
。deviceTransform
是应用于视图的转换,如果场景包含忽略变换的项,则需要提供。该便利函数等价于调用
itemAt(QPointF(x, y), deviceTransform)
。注意:有关此函数认为哪些项是可见的,请参阅
items()
的定义。- itemIndexMethod()#
- 返回类型:
另请参阅
获取属性
itemIndexMethod
。- items(path[, mode=Qt.IntersectsItemShape[, order=Qt.DescendingOrder[, deviceTransform=QTransform()]]]])#
- 参数:
path –
QPainterPath
mode –
ItemSelectionMode
order –
SortOrder
deviceTransform –
QTransform
- 返回类型:
.list of QGraphicsItem
这是一个重载函数。
返回所有可见项,根据
mode
,这些项要么在指定的path
内,要么与之相交,并按order
进行排序。在这种情况下,“可见”定义为对于:isVisible()返回true
,effectiveOpacity()返回的值大于0.0(这是完全透明的),并且父项不会剪裁它。mode
的默认值是Qt::IntersectsItemShape;所有与path
形状相交或包含在其中的项都被返回。deviceTransform
是应用于视图的转换,如果场景包含忽略变换的项,则需要提供。另请参阅
itemAt()
排序
- items(pos[, mode=Qt.IntersectsItemShape[, order=Qt.DescendingOrder[, deviceTransform=QTransform()]]]])
- 参数:
pos –
QPointF
mode –
ItemSelectionMode
order –
SortOrder
deviceTransform –
QTransform
- 返回类型:
.list of QGraphicsItem
返回所有可见的项目,根据
mode
,它们在列表中按order
排序,位于指定的pos
位置。在这种情况下,“可见”定义了以下项目:isVisible()返回true
,effectiveOpacity()返回大于0.0(这是完全透明)的值,并且父项目没有裁剪它。mode
的默认值是Qt::IntersectsItemShape;返回所有与pos
位置准确形状相交的项目。deviceTransform
是应用于视图的转换,如果场景包含忽略变换的项,则需要提供。另请参阅
itemAt()
排序
- items(polygon[, mode=Qt.IntersectsItemShape[, order=Qt.DescendingOrder[, deviceTransform=QTransform()]]])
- 参数:
polygon –
QPolygonF
mode –
ItemSelectionMode
order –
SortOrder
deviceTransform –
QTransform
- 返回类型:
.list of QGraphicsItem
这是一个重载函数。
返回所有可见的项目,根据
mode
,它们位于或与指定的polygon
相交,在列表中按order
排序。在这种情况下,“可见”定义了以下项目:isVisible()返回true
,effectiveOpacity()返回大于0.0(这是完全透明)的值,并且父项目没有裁剪它。mode
的默认值是Qt::IntersectsItemShape;返回所有与或包含在polygon
中的项目的准确形状相交的项目。deviceTransform
是应用于视图的转换,如果场景包含忽略变换的项,则需要提供。另请参阅
itemAt()
排序
- items(rect[, mode=Qt.IntersectsItemShape[, order=Qt.DescendingOrder[, deviceTransform=QTransform()]]])
- 参数:
rect –
QRectF
mode –
ItemSelectionMode
order –
SortOrder
deviceTransform –
QTransform
- 返回类型:
.list of QGraphicsItem
这是一个重载函数。
返回所有可见的项目,根据
mode
,它们位于或与指定的rect
相交,在列表中按order
排序。在这种情况下,“可见”定义了以下项目:isVisible()返回true
,effectiveOpacity()返回大于0.0(这是完全透明)的值,并且父项目没有裁剪它。mode
的默认值是Qt::IntersectsItemShape;返回所有与或包含在rect
中的项目的准确形状相交的项目。deviceTransform
是应用于视图的转换,如果场景包含忽略变换的项,则需要提供。另请参阅
itemAt()
排序
- items(x, y, w, h, mode, order[, deviceTransform=QTransform()])
- 参数:
x – float
y – float
宽(w) - 浮点数
高(h) - 浮点数
mode –
ItemSelectionMode
order –
SortOrder
deviceTransform –
QTransform
- 返回类型:
.list of QGraphicsItem
这是一个重载函数。
根据
mode
的不同,返回所有可见项目,这些项目要么在由x
、y
、w
和h
定义的矩形内,要么与该矩形相交,列表按order
排序。在这种情况下,“可见”定义了如下项目:isVisible() 返回true
、effectiveOpacity() 返回一个大于 0.0 的值(这表示完全透明)且父项目不对其剪裁。deviceTransform
是应用于视图的转换,如果场景包含忽略变换的项,则需要提供。- items([order=Qt.DescendingOrder])
- 参数:
order –
SortOrder
- 返回类型:
.list of QGraphicsItem
返回场景上所有项目的有序列表。
order
决定堆叠顺序。另请参阅
addItem()
removeItem()
Sorting
计算并返回场景上所有项目的边界矩形。该函数通过遍历所有项目工作,因此对于大型场景可能会很慢。
另请参阅
此事件处理程序,用于处理
keyEvent
事件,可以在子类中重新实现以接收按键事件。默认实现将事件转发到当前的焦点项目。此事件处理程序,用于处理
keyEvent
事件,可以在子类中重新实现以接收按键释放事件。默认实现将事件转发到当前的焦点项目。- minimumRenderSize()#
- 返回类型:
浮点数
获取属性
minimumRenderSize
的值。- mouseDoubleClickEvent(event)#
- 参数:
event –
QGraphicsSceneMouseEvent
此事件处理程序处理
mouseEvent
事件,可以在子类中重写以接收场景的鼠标双击事件。如果用户在场景上双击,则场景将首先接收鼠标按下事件,然后是释放事件(即单击),然后是双击事件,最后是释放事件。如果双击事件被发送到不同于第一次按下和释放的项,则它将作为按下事件传递。然而,在这种情况下,三击事件不会被作为双击事件传递。
默认实现类似于
mousePressEvent()
。注意:有关此函数认为哪些项是可见的,请参阅
items()
的定义。- mouseGrabberItem()#
- 返回类型:
返回当前鼠标抓取项,如果没有项当前抓取鼠标,则返回None。鼠标抓取项是接收发送到场景的所有鼠标事件的项目。
当一个项目接收并接受鼠标按下事件时,该项目就成为鼠标抓取项,并且它保持鼠标抓取项的状态,直到以下事件之一发生
如果项目在没有任何其他按钮按下时接收到鼠标释放事件,则它将失去鼠标抓取。
如果项目变为不可见(即有人调用
item->setVisible(false)
),或者如果该项目变为禁用(即有人调用item->setEnabled(false)
),则它将失去鼠标抓取。如果项目从场景中删除,则它将失去鼠标抓取。
如果项目失去鼠标抓取,则场景将忽略所有鼠标事件,直到新项抓取鼠标(即,直到新项接收鼠标按下事件)。
- mouseMoveEvent(event)#
- 参数:
event –
QGraphicsSceneMouseEvent
该事件处理器用于事件
mouseEvent
,可以通过子类重新实现以接收场景的鼠标移动事件。默认实现依赖于鼠标捕获状态。如果存在鼠标捕获项,则事件被发送到鼠标捕获项。如果当前位置有任何接受悬停事件的项,则事件被转换为悬停事件并接受;否则将忽略该事件。
- mousePressEvent(event)#
- 参数:
event –
QGraphicsSceneMouseEvent
该事件处理器用于事件
mouseEvent
,可以通过子类重新实现以接收场景的鼠标按下事件。默认实现依赖于场景状态。如果存在鼠标捕获项,则事件会被发送到鼠标捕获项。否则,事件会被转发到场景中最上层的可见项,该项接受从事件位置发送的鼠标事件,并且该项立即成为鼠标捕获项。
如果在场景的给定位置上没有项,选择区域会重置,任何获得焦点的项都会失去输入焦点,然后事件就会被忽略。
注意:有关此函数认为哪些项是可见的,请参阅
items()
的定义。- mouseReleaseEvent(event)#
- 参数:
event –
QGraphicsSceneMouseEvent
该事件处理器用于事件
mouseEvent
,可以通过子类重新实现以接收场景的鼠标释放事件。默认实现依赖于鼠标捕获状态。如果没有鼠标捕获,则事件会被忽略。否则,如果存在鼠标捕获项,事件会被发送到鼠标捕获项。如果这个鼠标释放代表最后按下的按钮,则鼠标捕获项会失去鼠标捕获。
- palette()#
- 返回类型:
另请参阅
属性
palette
的 getter。- removeItem(item)#
- 参数:
item –
QGraphicsItem
从场景中删除项
item
及其所有子项。将item
的所有权传递给调用者(即,QGraphicsScene
在销毁时将不再删除item
)。另请参阅
- render(painter[, target=QRectF()[, source=QRectF()[, aspectRatioMode=Qt.KeepAspectRatio]]])#
- 参数:
painter –
QPainter
target –
QRectF
source –
QRectF
aspectRatioMode –
AspectRatioMode
警告
本节包含从C++自动转换为Python的片段,可能包含错误。
使用
painter
将场景中source
矩形的区域绘制到target
。此函数非常有用,可以将场景 contents 捕获到 paint device 上,例如到 QImage(例如,进行截图),或与 QPrinter 打印。例如scene = QGraphicsScene() scene.addItem(... ... printer = QPrinter(QPrinter.HighResolution) printer.setPaperSize(QPrinter.A4) painter = QPainter(printer) scene.render(painter)
如果
source
是空矩形,此函数将使用sceneRect
来确定要绘制的内容。如果target
是空矩形,则使用painter
的 paint device 的尺寸。根据
aspectRatioMode
将源矩形的内容转换,以适应目标矩形。默认情况下,保持宽高比,并将source
缩放以适合target
。另请参阅
- sceneRect()#
- 返回类型:
另请参阅
属性
sceneRect
的 getter。此信号由
QGraphicsScene
在场景矩形改变时发出。参数rect
是新的场景矩形。另请参阅
- selectedItems()#
- 返回类型:
.list of QGraphicsItem
返回所有当前选中项的列表。项的返回顺序无关紧要。
另请参阅
- selectionArea()#
- 返回类型:
返回之前通过
setSelectionArea()
设置的选择区域,或如果没有设置选择区域,则返回一个空的 QPainterPath。另请参阅
- selectionChanged()#
此信号由
QGraphicsScene
在选择更改时发出。您可以通过调用selectedItems()
来获取新的选中项列表。当选择项或取消选择项、设置或清除选择区域、如果将预选项添加到场景或从场景中删除选中项时,选择会更改。
QGraphicsScene
只在组选择操作中发出此信号一次。例如,如果您设置了选择区域,选中或取消选中一个QGraphicsItemGroup
或者在场景中添加或移除了包含多个选中项的父项,那么在操作完成后才会发射selectionChanged
() 信号(而不是为每个项都发射一次)。- sendEvent(item, event)#
- 参数:
item –
QGraphicsItem
事件 –
QEvent
- 返回类型:
bool
通过可能的事件过滤器将事件
event
发送到项item
。只有当该项启用时,才发送事件。
如果事件被过滤器过滤或如果该项被禁用,则返回
false
。否则返回事件处理程序返回的值。另请参阅
有关
sceneEvent()
方法的更多信息,请参阅sceneEventFilter()
- setActivePanel(item)#
- 参数:
item –
QGraphicsItem
激活
item
,它必须是此场景中的一个项目。您也可以为item
传递 0,此时QGraphicsScene
将将任何当前激活的面板置为非激活状态。如果场景当前处于非活动状态,则
item
将保持非活动状态,直到场景变为活动状态(或者,如果item
为None
,则不会激活任何项)。- setActiveWindow(widget)#
- 参数:
widget –
QGraphicsWidget
激活
widget
,它必须是此场景中的一个小部件。您也可以为widget
传递 0,此时QGraphicsScene
将将任何当前激活的窗口置为非激活状态。属性
backgroundBrushᅟ
的设置器。- setBspTreeDepth(depth)#
- 参数:
depth – int
另请参阅
属性
bspTreeDepthᅟ
的设置器。- setFocus([focusReason=Qt.OtherFocusReason])#
- 参数:
focusReason –
FocusReason
通过向场景发送一个QFocusEvent来设置场景的焦点,将
focusReason
作为原因。如果场景之前失去焦点并在某个项目获得焦点,场景再次获得焦点时,上一次焦点项目将收到焦点,并以focusReason
作为原因。如果场景已经具有焦点,此函数不做任何操作。
- setFocusItem(item[, focusReason=Qt.OtherFocusReason])#
- 参数:
item –
QGraphicsItem
focusReason –
FocusReason
将场景的焦点项目设置为
item
,使用焦点原因focusReason
,并在移除任何以前可能有焦点的项目焦点后执行。如果
item
是None
,或者它不接受焦点(即未启用ItemIsFocusable
标志),或者不可见或未启用,此函数仅从任何以前的焦点项目中移除焦点。如果项目不是
None
,并且场景当前没有焦点(即hasFocus()
返回false
),此函数将自动调用setFocus()
。- setFocusOnTouch(enabled)#
- 参数:
enabled – bool
另请参阅
属性
focusOnTouchᅟ
的设置器。属性 font 的设置器。
属性 foregroundBrush 的设置器。
- setItemIndexMethod(method)#
- 参数:
method – ItemIndexMethod
另请参阅
属性 itemIndexMethod 的设置器。
- setMinimumRenderSize(minSize)#
- 参数:
minSize – float
另请参阅
属性 minimumRenderSize 的设置器。
属性 palette 的设置器。
属性 sceneRect 的设置器。
- setSceneRect(x, y, w, h)
- 参数:
x – float
y – float
宽(w) - 浮点数
高(h) - 浮点数
- setSelectionArea(path[, selectionOperation=Qt.ReplaceSelection[, mode=Qt.IntersectsItemShape[, deviceTransform=QTransform()]]]])#
- 参数:
path –
QPainterPath
selectionOperation – ItemSelectionOperation
mode –
ItemSelectionMode
deviceTransform –
QTransform
这是一个重载函数。
使用
mode
确定哪些项在选择区域内,将选择区域设置为path
。deviceTransform
是应用于视图的转换,如果场景包含忽略变换的项,则需要提供。selectionOperation
确定对当前选中项的操作。- setSelectionArea(path, deviceTransform)
- 参数:
path –
QPainterPath
deviceTransform –
QTransform
将选择区域设置为
path
。该区域内的所有项都将立即选中,区域外的项将被取消选中。您可以调用selectedItems()
以获取所有选中项的列表。deviceTransform
是应用于视图的转换,如果场景包含忽略变换的项,则需要提供。要选中一个项,该项目必须被标记为可选的(
ItemIsSelectable
)。- setStickyFocus(enabled)#
- 参数:
enabled – bool
另请参阅
属性
stickyFocusᅟ
的设置器。将场景的样式设置为
style
,并将样式重新父化到场景上。任何先前分配的样式都将被删除。场景的样式默认为style()
,并作为场景中所有QGraphicsWidget
项的默认样式。通过调用此函数或通过调用
setStyle()
来更改样式,将自动更新场景中所有未明确分配样式的控件样式。如果
style
为None
,QGraphicsScene
将恢复到style()
。另请参阅
- stickyFocus()#
- 返回类型:
bool
另请参阅
属性《stickyFocus》的获取器。
返回场景的样式,如果没有为场景明确分配样式,则与style()相同。
另请参阅
在场景上计划重绘区域
rect
。另请参阅
- update(x, y, w, h)
- 参数:
x – float
y – float
宽(w) - 浮点数
高(h) - 浮点数
这是一个重载函数。
此函数相当于调用 update(QRectF(x, y, w, h));
- views()#
- 返回类型:
为QGraphicsView的列表
返回显示此场景的所有视图的列表。
另请参阅
- wheelEvent(event)#
- 参数:
event –
QGraphicsSceneWheelEvent
此事件处理程序,针对事件
wheelEvent
,可以在子类中重新实现以接收场景的鼠标滚轮事件。默认情况下,事件会传递到鼠标下的最顶层可见项。如果忽略,则事件会传播到该项下的项,依此类推,直到事件被接受或达到场景。如果没有项接受事件,则事件被忽略。
注意:有关此函数认为哪些项是可见的,请参阅
items()
的定义。另请参阅
- width()#
- 返回类型:
浮点数
此便利函数等同于调用
sceneRect()
.width()。另请参阅