PySide6.QtWidgets.QGraphicsItem¶
- class QGraphicsItem¶
QGraphicsItem
类是QGraphicsScene
中所有图形项的基类。更多…继承者:
QGraphicsPixmapItem
,QGraphicsLineItem
,QGraphicsItemGroup
,QAbstractGraphicsShapeItem
,QGraphicsSimpleTextItem
,QGraphicsRectItem
,QGraphicsPolygonItem
,QGraphicsPathItem
,QGraphicsEllipseItem
,QGraphicsObject
,QGraphicsWidget
,QGraphicsProxyWidget
,QGraphicsTextItem
,QGraphicsSvgItem
,QGraphicsVideoItem
,QLegend
,QChart
,QPolarChart
概要¶
方法¶
def
__init__()
def
acceptDrops()
def
addToIndex()
def
boundingRegion()
def
cacheMode()
def
childItems()
def
clearFocus()
def
clipPath()
def
collidingItems()
def
cursor()
def
data()
def
ensureVisible()
def
flags()
def
focusItem()
def
focusProxy()
def
focusScopeItem()
def
grabKeyboard()
def
grabMouse()
def
graphicsEffect()
def
group()
def
hasCursor()
def
hasFocus()
def
hide()
def
isActive()
def
isAncestorOf()
def
isClipped()
def
isEnabled()
def
isObscured()
def
isPanel()
def
isSelected()
def
isUnderMouse()
def
isVisible()
def
isVisibleTo()
def
isWidget()
def
isWindow()
def
itemTransform()
def
mapFromItem()
def
mapFromParent()
def
mapFromScene()
def
mapRectToItem()
def
mapRectToScene()
def
mapToItem()
def
mapToParent()
def
mapToScene()
def
moveBy()
def
opacity()
def
panel()
def
panelModality()
def
parentItem()
def
parentObject()
def
parentWidget()
def
pos()
def
resetTransform()
def
rotation()
def
scale()
def
scene()
def
scenePos()
def
sceneTransform()
def
setAcceptDrops()
def
setActive()
def
setCacheMode()
def
setCursor()
def
setData()
def
setEnabled()
def
setFlag()
def
setFlags()
def
setFocus()
def
setFocusProxy()
def
setGroup()
def
setOpacity()
def
setParentItem()
def
setPos()
def
setRotation()
def
setScale()
def
setSelected()
def
setToolTip()
def
setTransform()
def
setVisible()
def
setX()
def
setY()
def
setZValue()
def
show()
def
stackBefore()
def
toolTip()
def
topLevelItem()
def
topLevelWidget()
def
transform()
def
ungrabKeyboard()
def
ungrabMouse()
def
unsetCursor()
def
update()
def
window()
def
x()
def
y()
def
zValue()
虚拟方法¶
def
advance()
def
boundingRect()
def
contains()
def
dragEnterEvent()
def
dragLeaveEvent()
def
dragMoveEvent()
def
dropEvent()
def
extension()
def
focusInEvent()
def
focusOutEvent()
def
hoverMoveEvent()
def
isObscuredBy()
def
itemChange()
def
keyPressEvent()
def
mouseMoveEvent()
def
opaqueArea()
def
paint()
def
sceneEvent()
def
shape()
def
type()
def
wheelEvent()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
它为编写自定义项目提供了一个轻量级的基础。这包括定义项目的几何形状、碰撞检测、其绘制实现以及通过其事件处理程序进行项目交互。
QGraphicsItem
是 Graphics View Framework 的一部分。为了方便,Qt 提供了一组标准图形项,用于最常见的形状。这些包括:
QGraphicsEllipseItem
提供了一个椭圆项QGraphicsLineItem
提供了一个线条项QGraphicsPathItem
提供了一个任意的路径项QGraphicsPixmapItem
提供了一个像素图项QGraphicsPolygonItem
提供了一个多边形项QGraphicsRectItem
提供了一个矩形项QGraphicsSimpleTextItem
提供了一个简单的文本标签项QGraphicsTextItem
提供了一个高级的文本浏览器项
一个项目的所有几何信息都基于其局部坐标系。项目的位置,
pos()
,是唯一不在局部坐标系中操作的函数,因为它返回的是父坐标系中的位置。图形视图坐标系详细描述了坐标系。您可以通过调用
setVisible()
来设置一个项目是否应该可见(即绘制并接受事件)。隐藏一个项目也会隐藏其子项目。同样,您可以通过调用setEnabled()
来启用或禁用一个项目。如果您禁用一个项目,其所有子项目也将被禁用。默认情况下,项目是可见且启用的。要切换一个项目是否被选中,首先通过设置ItemIsSelectable
标志来启用选择,然后调用setSelected()
。通常,选择是由场景根据用户交互来切换的。要编写自己的图形项,首先需要创建一个
QGraphicsItem
的子类,然后开始实现它的两个纯虚公共函数:boundingRect()
,它返回项绘制的区域的估计值,以及paint()
,它实现实际的绘制。例如:class SimpleItem(QGraphicsItem): # public QRectF boundingRect() override penWidth = 1 return QRectF(-10 - penWidth / 2, -10 - penWidth / 2, 20 + penWidth, 20 + penWidth) def paint(painter, option,): QWidget widget) override painter.drawRoundedRect(-10, -10, 20, 20, 5, 5)
boundingRect()
函数有许多不同的用途。QGraphicsScene
基于boundingRect()
来建立其项目索引,而QGraphicsView
使用它来剔除不可见的项目,并确定在绘制重叠项目时需要重新组合的区域。此外,QGraphicsItem
的碰撞检测机制使用boundingRect()
来提供高效的截止。在collidesWithItem()
中的细粒度碰撞算法基于调用shape()
,它返回项目形状的精确轮廓作为 QPainterPath。QGraphicsScene
期望所有项目的boundingRect()
和shape()
保持不变,除非它收到通知。如果你想以任何方式更改项目的几何形状,你必须首先调用prepareGeometryChange()
以允许QGraphicsScene
更新其记录。碰撞检测可以通过两种方式完成:
重新实现
shape()
以返回项目的准确形状,并依赖collidesWithItem()
的默认实现来进行形状与形状的相交检测。如果形状复杂,这可能会相当耗费资源。重新实现
collidesWithItem()
以提供您自己的自定义项目和形状碰撞算法。
contains()
函数可以被调用来确定项目是否包含一个点。这个函数也可以由项目重新实现。contains()
的默认行为是基于调用shape()
。项目可以包含其他项目,也可以被其他项目包含。所有项目都可以有一个父项目和一系列子项目。除非项目没有父项目,否则它的位置是在父坐标中(即父项目的局部坐标)。父项目将其位置和变换传播给所有子项目。
转换¶
QGraphicsItem
除了其基本位置pos()
外,还支持投影变换。有几种方法可以更改项目的变换。对于简单的变换,您可以调用便捷函数setRotation()
或setScale()
,或者您可以将任何变换矩阵传递给setTransform()
。对于高级变换控制,您还可以通过调用setTransformations()
来设置多个组合变换。项目的变换从父级到子级累积,因此如果父级和子级项目都旋转了90度,子级的总变换将是180度。同样,如果项目的父级缩放到其原始大小的2倍,其子级也将是原来的两倍大。项目的变换不会影响其自身的局部几何形状;所有几何函数(例如,
contains()
、update()
和所有映射函数)仍然在局部坐标中操作。为了方便,QGraphicsItem
提供了函数sceneTransform()
,它返回项目的总变换矩阵(包括其位置和所有父级的位置和变换),以及scenePos()
,它返回其在场景坐标中的位置。要重置项目的矩阵,请调用resetTransform()
。某些变换操作根据应用的顺序会产生不同的结果。例如,如果你先缩放再旋转,可能会得到与先旋转再缩放不同的结果。然而,在
QGraphicsItem
上设置变换属性的顺序不会影响最终的变换结果;QGraphicsItem
总是按照固定的、定义的顺序应用这些属性:应用项目的基础变换(
transform()
)项目的转换列表按顺序应用(
transformations()
)该项目相对于其变换原点旋转(
rotation()
,transformOriginPoint()
)该项目相对于其变换原点进行缩放(
scale()
,transformOriginPoint()
)
绘画¶
paint()
函数由QGraphicsView
调用,用于绘制项目的内容。该项目没有自己的背景或默认填充;项目后面的任何内容都会透过未在此函数中明确绘制的所有区域显示出来。您可以调用update()
来安排重新绘制,可以选择传递需要重新绘制的矩形。根据项目是否在视图中可见,项目可能会或可能不会被重新绘制;在QGraphicsItem
中没有与repaint()
等效的功能。项目由视图绘制,从父项目开始,然后按升序堆叠顺序绘制子项目。您可以通过调用
setZValue()
来设置项目的堆叠顺序,并通过调用zValue()
来测试它,其中z值较低的项目在z值较高的项目之前绘制。堆叠顺序适用于同级项目;父项目总是在其子项目之前绘制。排序¶
所有项目都以定义的稳定顺序绘制,这个相同的顺序决定了当你点击场景时哪些项目将首先接收鼠标输入。通常你不需要担心排序,因为项目遵循“自然顺序”,遵循场景的逻辑结构。
一个项目的子项目会堆叠在父项目的顶部,而兄弟项目则按照插入顺序堆叠(即,按照它们被添加到场景中或添加到同一父项目的顺序)。如果你先添加项目A,然后添加B,那么B将会在A的顶部。如果你随后添加C,项目的堆叠顺序将会是A,然后是B,最后是C。
这个例子展示了从拖放机器人示例中机器人所有肢体的堆叠顺序。躯干是根项目(所有其他项目都是躯干的孩子或后代),因此它首先被绘制。接下来,头部被绘制,因为它是躯干孩子列表中的第一个项目。然后绘制左上臂。由于下臂是上臂的孩子,下臂随后被绘制,接着是上臂的下一个兄弟,即右上臂,依此类推。
对于高级用户,有几种方法可以改变项目的排序方式:
你可以调用
setZValue()
来显式地将一个项目堆叠在其他同级项目的上面或下面。项目的默认Z值为0。具有相同Z值的项目按插入顺序堆叠。你可以调用
stackBefore()
来重新排序子元素列表。这将直接修改插入顺序。你可以设置
ItemStacksBehindParent
标志,将子项目堆叠在其父项目后面。
两个同级项目的堆叠顺序也适用于每个项目的子项目和后代项目。因此,如果一个项目在另一个项目之上,那么它的所有子项目也将位于另一个项目的所有子项目之上。
事件¶
QGraphicsItem
通过虚函数sceneEvent()
从QGraphicsScene
接收事件。此函数将最常见的事件分发到一组便捷的事件处理程序:contextMenuEvent()
处理上下文菜单事件focusInEvent()
和focusOutEvent()
处理焦点进入和离开事件hoverEnterEvent()
,hoverMoveEvent()
, 和hoverLeaveEvent()
处理悬停进入、移动和离开事件inputMethodEvent()
处理输入事件,以支持无障碍功能keyPressEvent()
和keyReleaseEvent()
处理按键按下和释放事件mousePressEvent()
,mouseMoveEvent()
,mouseReleaseEvent()
, 和mouseDoubleClickEvent()
处理鼠标按下、移动、释放、点击和双击事件
您可以通过安装事件过滤器来过滤任何其他项目的事件。此功能与Qt的常规事件过滤器(参见QObject::installEventFilter())是分开的,后者仅适用于QObject的子类。通过调用
installSceneEventFilter()
将您的项目安装为另一个项目的事件过滤器后,过滤的事件将由虚函数sceneEventFilter()
接收。您可以通过调用removeSceneEventFilter()
来移除项目事件过滤器。自定义数据¶
有时,为项目注册自定义数据非常有用,无论是自定义项目还是标准项目。您可以在任何项目上调用
setData()
,使用键值对(键为整数,值为QVariant)在其中存储数据。要从项目中获取自定义数据,请调用data()
。此功能完全由Qt本身未触及;它是为用户方便而提供的。- class GraphicsItemFlag¶
(继承自
enum.Flag
) 此枚举描述了可以在项目上设置的不同标志,以切换项目行为中的不同功能。所有标志默认情况下都是禁用的。
常量
描述
QGraphicsItem.ItemIsMovable
该项目支持使用鼠标进行交互式移动。通过点击项目并拖动,项目将随鼠标光标一起移动。如果该项目有子项目,所有子项目也会被移动。如果该项目是选择的一部分,所有选中的项目也会被移动。此功能通过
QGraphicsItem
的鼠标事件处理程序的基本实现提供便利。QGraphicsItem.ItemIsSelectable
该项目支持选择。启用此功能将使
setSelected()
能够切换项目的选择状态。它还将使项目在调用setSelectionArea()
、点击项目或在QGraphicsView
中使用橡皮筋选择时自动被选中。QGraphicsItem.ItemIsFocusable
该项目支持键盘输入焦点(即,它是一个输入项目)。启用此标志将允许项目接受焦点,这再次允许将键事件传递到
keyPressEvent()
和keyReleaseEvent()
。QGraphicsItem.ItemClipsToShape
项目剪辑到其自身的形状。项目无法在其形状之外绘制或接收鼠标、平板电脑、拖放或悬停事件。默认情况下是禁用的。这种行为由QGraphicsView::drawItems()或QGraphicsScene::drawItems()强制执行。此标志在Qt 4.3中引入。
QGraphicsItem.ItemClipsChildrenToShape
该项目将所有子项的绘制内容裁剪为其自身的形状。无论是直接还是间接子项的项目都不能在此项目的形状之外绘制。默认情况下,此标志是禁用的;子项可以在任何地方绘制。此行为由QGraphicsView::drawItems()或QGraphicsScene::drawItems()强制执行。此标志在Qt 4.3中引入。
注意
此标志类似于ItemContainsChildrenInShape,但此外还通过裁剪子项来强制包含。
常量
描述
QGraphicsItem.ItemIgnoresTransformations
该项目忽略继承的变换(即,其位置仍然锚定到其父项,但忽略父项或视图的旋转、缩放或剪切变换)。此标志对于保持文本标签项水平且不缩放非常有用,因此即使视图变换,它们仍然可读。设置后,项目的视图几何和场景几何将分别维护。您必须调用
deviceTransform()
来映射坐标并检测视图中的碰撞。默认情况下,此标志是禁用的。此标志在Qt 4.3中引入。注意
设置此标志后,您仍然可以缩放项目本身,并且该缩放变换将影响项目的子项。
常量
描述
QGraphicsItem.ItemIgnoresParentOpacity
该项忽略其父项的不透明度。该项的有效不透明度与其自身相同;它不会与父项的不透明度结合。此标志允许您的项即使父项是半透明的,也能保持其绝对不透明度。此标志在Qt 4.5中引入。
QGraphicsItem.ItemDoesntPropagateOpacityToChildren
该项不会将其不透明度传播到其子项。此标志允许您创建一个半透明的项,而不会影响其子项的不透明度。此标志在Qt 4.5中引入。
QGraphicsItem.ItemStacksBehindParent
该项被堆叠在其父项后面。默认情况下,子项堆叠在父项的顶部。但设置此标志后,子项将堆叠在其后面。此标志对于阴影效果和跟随父项几何形状而不在其上绘制的装饰对象非常有用。此标志在Qt 4.5中引入。
QGraphicsItem.ItemUsesExtendedStyleOption
该项目使用了exposedRect在
QStyleOptionGraphicsItem
中。默认情况下,exposedRect被初始化为项目的boundingRect()
。您可以启用此标志以设置更细粒度的样式选项。如果您需要更高的值,请使用levelOfDetailFromTransform()
。此标志在Qt 4.6中引入。QGraphicsItem.ItemHasNoContents
该项目不绘制任何内容(即,在项目上调用
paint()
没有效果)。你应该在不需要绘制的项目上设置此标志,以确保图形视图避免不必要的绘制准备工作。此标志在Qt 4.6中引入。QGraphicsItem.ItemSendsGeometryChanges
该项目启用了
itemChange()
通知,用于ItemPositionChange
、ItemPositionHasChanged
、ItemTransformChange
、ItemTransformHasChanged
、ItemRotationChange
、ItemRotationHasChanged
、ItemScaleChange
、ItemScaleHasChanged
、ItemTransformOriginPointChange
和ItemTransformOriginPointHasChanged
。出于性能原因,这些通知默认是禁用的。您必须启用此标志才能接收位置和变换更改的通知。此标志在Qt 4.6中引入。QGraphicsItem.ItemAcceptsInputMethod
该项目支持通常用于亚洲语言的输入法。此标志在Qt 4.6中引入。
QGraphicsItem.ItemNegativeZStacksBehindParent
如果项目的z值为负,则项目自动堆叠在其父项后面。此标志允许
setZValue()
切换ItemStacksBehindParent。此标志在Qt 4.6中引入。QGraphicsItem.ItemIsPanel
该项目是一个面板。面板提供激活和包含的焦点处理。一次只能激活一个面板(参见
isActive()
)。当没有面板激活时,QGraphicsScene
会激活所有非面板项目。窗口项目(即isWindow()
返回true
)是面板。此标志在 Qt 4.6 中引入。QGraphicsItem.ItemSendsScenePositionChanges
该项目启用了
itemChange()
通知,用于ItemScenePositionHasChanged
。出于性能原因,默认情况下这些通知是禁用的。您必须启用此标志才能接收场景位置变化的通知。此标志在Qt 4.6中引入。QGraphicsItem.ItemContainsChildrenInShape
此标志表示项目的所有直接或间接子项仅在项目的形状内绘制。与ItemClipsChildrenToShape不同,此限制并未强制执行。当您手动确保绘制仅限于项目的形状并希望避免与强制执行裁剪相关的成本时,请设置ItemContainsChildrenInShape。设置此标志可实现更高效的绘制和碰撞检测。默认情况下,此标志是禁用的。
注意
如果同时设置了此标志和ItemClipsChildrenToShape,则将强制执行裁剪。这相当于仅设置ItemClipsChildrenToShape。
此标志在Qt 5.4中引入。
- class GraphicsItemChange¶
此枚举描述了由
itemChange()
通知的状态变化。通知在状态变化时发送,在某些情况下,可以进行调整(有关详细信息,请参阅每个变化的文档)。注意:在
itemChange()
内部调用QGraphicsItem
本身的函数时要小心,因为某些函数调用可能会导致不必要的递归。例如,在itemChange()
中收到ItemPositionChange通知时,你不能调用setPos()
,因为setPos()
函数会再次调用itemChange
(ItemPositionChange)。相反,你可以从itemChange()
返回新的调整后的位置。常量
描述
QGraphicsItem.ItemEnabledChange
项目的启用状态发生变化。如果项目当前是启用的,它将变为禁用,反之亦然。value参数是新的启用状态(即true或false)。在
itemChange()
中不要调用setEnabled()
,因为此通知正在传递。相反,你可以从itemChange()
返回新的状态。QGraphicsItem.ItemEnabledHasChanged
项目的启用状态已更改。value参数是新的启用状态(即true或false)。在
itemChange()
中不要调用setEnabled()
,因为此通知正在传递。返回值被忽略。QGraphicsItem.ItemPositionChange
项目的位置发生变化。如果启用了
ItemSendsGeometryChanges
标志,并且当项目的本地位置相对于其父项发生变化时(即由于调用setPos()
或moveBy()
),将发送此通知。value参数是新位置(即QPointF)。您可以调用pos()
来获取原始位置。在itemChange()
中传递此通知时,不要调用setPos()
或moveBy()
;相反,您可以从itemChange()
返回新的调整后的位置。在此通知之后,如果位置发生变化,QGraphicsItem
会立即发送ItemPositionHasChanged通知。QGraphicsItem.ItemPositionHasChanged
项目的位置已更改。如果启用了
ItemSendsGeometryChanges
标志,并且在项目相对于其父项的局部位置更改后,将发送此通知。值参数是新位置(与pos()
相同),并且QGraphicsItem
忽略此通知的返回值(即只读通知)。QGraphicsItem.ItemTransformChange
项目的变换矩阵发生变化。如果启用了
ItemSendsGeometryChanges
标志,并且项目的局部变换矩阵发生变化(例如,由于调用setTransform()
),则会发送此通知。value参数是新的矩阵(即QTransform);要获取旧的矩阵,请调用transform()
。在传递此通知时,不要调用setTransform()
或在itemChange()
中设置任何变换属性;相反,你可以从itemChange()
返回新的矩阵。如果你更改了变换属性,则不会发送此通知。QGraphicsItem.ItemTransformHasChanged
项目的变换矩阵已更改,可能是因为调用了
setTransform
,或者其中一个变换属性已更改。如果启用了ItemSendsGeometryChanges
标志,并且在项目的局部变换矩阵更改后,将发送此通知。value参数是新矩阵(与transform()
相同),并且QGraphicsItem
忽略此通知的返回值(即只读通知)。QGraphicsItem.ItemRotationChange
项目的旋转属性发生变化。如果启用了
ItemSendsGeometryChanges
标志,并且当项目的旋转属性发生变化时(即,作为调用setRotation()
的结果),将发送此通知。value参数是新的旋转值(即,一个double);要获取旧的旋转值,请调用rotation()
。在传递此通知时,不要在itemChange()
中调用setRotation()
;相反,你可以从itemChange()
返回新的旋转值。QGraphicsItem.ItemRotationHasChanged
项目的旋转属性已更改。如果启用了
ItemSendsGeometryChanges
标志,并且在项目的旋转属性更改后,将发送此通知。value参数是新的旋转值(即一个double),QGraphicsItem
忽略此通知的返回值(即只读通知)。在itemChange()
中不要调用setRotation()
,因为此通知正在传递。QGraphicsItem.ItemScaleChange
项目的缩放属性发生变化。如果启用了
ItemSendsGeometryChanges
标志,并且项目的缩放属性发生变化(即,作为调用setScale()
的结果),则会发送此通知。value参数是新的缩放比例(即,一个double);要获取旧的缩放比例,请调用scale()
。在itemChange()
中不要调用setScale()
,因为此通知正在传递;相反,您可以从itemChange()
返回新的缩放比例。QGraphicsItem.ItemScaleHasChanged
项目的缩放属性已更改。如果启用了
ItemSendsGeometryChanges
标志,并且在项目的缩放属性更改后,将发送此通知。value参数是新的缩放比例(即一个双精度浮点数),QGraphicsItem
忽略此通知的返回值(即只读通知)。在itemChange()
中不要调用setScale()
,因为此通知正在传递中。QGraphicsItem.ItemTransformOriginPointChange
项目的变换原点属性发生变化。如果启用了
ItemSendsGeometryChanges
标志,并且项目的变换原点属性发生变化(即,作为调用setTransformOriginPoint()
的结果),则会发送此通知。value参数是新的原点(即QPointF);要获取旧的原点,请调用transformOriginPoint()
。在itemChange()
中传递此通知时,不要调用setTransformOriginPoint()
;相反,您可以从itemChange()
返回新的变换原点。QGraphicsItem.ItemTransformOriginPointHasChanged
项目的变换原点属性已更改。如果启用了
ItemSendsGeometryChanges
标志,并且在项目的变换原点属性更改后,将发送此通知。值参数是新的原点(即QPointF),并且QGraphicsItem
忽略此通知的返回值(即只读通知)。在itemChange()
中不要调用setTransformOriginPoint()
,因为此通知正在传递中。QGraphicsItem.ItemSelectedChange
项目的选中状态发生变化。如果项目当前被选中,它将变为未选中,反之亦然。value参数是新的选中状态(即true或false)。在传递此通知时,不要在
itemChange()
中调用setSelected()
;相反,你可以从itemChange()
返回新的选中状态。QGraphicsItem.ItemSelectedHasChanged
项目的选中状态已更改。value参数是新的选中状态(即true或false)。在
itemChange()
中不要调用setSelected()
,因为此通知正在传递。返回值被忽略。QGraphicsItem.ItemVisibleChange
项目的可见状态发生变化。如果项目当前是可见的,它将变为不可见,反之亦然。value参数是新的可见状态(即true或false)。在传递此通知时,请不要在
itemChange()
中调用setVisible()
;相反,您可以从itemChange()
返回新的可见状态。QGraphicsItem.ItemVisibleHasChanged
项目的可见状态已更改。value参数是新的可见状态(即true或false)。在
itemChange()
中不要调用setVisible()
,因为此通知正在传递。返回值被忽略。QGraphicsItem.ItemParentChange
项目的父项发生变化。value参数是新的父项(即一个
QGraphicsItem
指针)。在itemChange()
中不要调用setParentItem()
,因为这个通知正在传递;相反,你可以从itemChange()
返回新的父项。QGraphicsItem.ItemParentHasChanged
项目的父项已更改。value 参数是新的父项(即指向
QGraphicsItem
的指针)。在传递此通知时,不要在itemChange()
中调用setParentItem()
。返回值被忽略。QGraphicsItem.ItemChildAddedChange
一个子项被添加到此项。value参数是新的子项(即一个
QGraphicsItem
指针)。在传递此通知时,不要将此子项传递给任何项的setParentItem()
函数。返回值未使用;在此通知中无法调整任何内容。请注意,发送此通知时,新的子项可能尚未完全构建;在子项上调用纯虚函数可能导致崩溃。QGraphicsItem.ItemChildRemovedChange
一个子项从此项中移除。value参数是将要被移除的子项(即一个
QGraphicsItem
指针)。返回值未使用;在此通知中您无法调整任何内容。QGraphicsItem.ItemSceneChange
项目被移动到一个新的场景。当项目被添加到其初始场景时,以及当它被移除时,也会发送此通知。项目的
scene()
是旧场景,如果项目尚未添加到场景中,则为None
。value参数是新场景(即QGraphicsScene
指针),如果项目从场景中移除,则为None
。在传递此通知时,不要通过将此项目传递给addItem()
来覆盖此更改;相反,您可以从itemChange()
返回新场景。请谨慎使用此功能;反对场景更改可能会迅速导致不必要的递归。QGraphicsItem.ItemSceneHasChanged
项目的场景已更改。项目的
scene()
是新场景。当项目被添加到其初始场景时,以及当它被移除时,也会发送此通知。value 参数是新场景(即指向QGraphicsScene
的指针)。在itemChange()
中不要调用 setScene(),因为此通知正在传递。返回值被忽略。QGraphicsItem.ItemCursorChange
项目的光标发生变化。value参数是新的光标(即QCursor)。在
itemChange()
中不要调用setCursor()
,因为此通知正在传递。相反,你可以从itemChange()
返回一个新的光标。QGraphicsItem.ItemCursorHasChanged
项目的光标已更改。value 参数是新的光标(即 QCursor)。在传递此通知时,不要调用
setCursor()
。返回值被忽略。QGraphicsItem.ItemToolTipChange
项目的工具提示发生变化。value参数是新的工具提示(即
QToolTip
)。在itemChange()
中不要调用setToolTip()
,因为此通知正在传递。相反,你可以从itemChange()
返回一个新的工具提示。QGraphicsItem.ItemToolTipHasChanged
项目的工具提示已更改。value 参数是新的工具提示(即
QToolTip
)。在此通知传递时不要调用setToolTip()
。返回值被忽略。QGraphicsItem.ItemFlagsChange
项目的标志发生变化。value参数是新的标志(即quint32)。在
itemChange()
中不要调用setFlags()
,因为此通知正在传递。相反,你可以从itemChange()
返回新的标志。QGraphicsItem.ItemFlagsHaveChanged
项目的标志已更改。value参数是新的标志(即quint32)。在
itemChange()
中不要调用setFlags()
,因为此通知正在传递。返回值被忽略。QGraphicsItem.ItemZValueChange
项目的Z值发生变化。value参数是新的Z值(即一个双精度浮点数)。在
itemChange()
中不要调用setZValue()
,因为此通知正在传递。相反,你可以从itemChange()
返回一个新的Z值。QGraphicsItem.ItemZValueHasChanged
项目的Z值已更改。value参数是新的Z值(即一个双精度浮点数)。在传递此通知时,不要调用
setZValue()
。返回值被忽略。QGraphicsItem.ItemOpacityChange
项目的透明度发生变化。value参数是新的透明度(即一个双精度浮点数)。在
itemChange()
中不要调用setOpacity()
,因为此通知正在传递。相反,你可以从itemChange()
返回一个新的透明度。QGraphicsItem.ItemOpacityHasChanged
项目的不透明度已更改。value参数是新的不透明度(即一个双精度浮点数)。在传递此通知时,不要调用
setOpacity()
。返回值被忽略。QGraphicsItem.ItemScenePositionHasChanged
项目场景位置已更改。如果启用了
ItemSendsScenePositionChanges
标志,并且在项目场景位置更改后(即项目本身的位置或变换或任何祖先的位置或变换已更改),将发送此通知。value参数是新的场景位置(与scenePos()
相同),并且QGraphicsItem
忽略此通知的返回值(即只读通知)。
- class CacheMode¶
此枚举描述了
QGraphicsItem
的缓存模式。缓存用于通过分配和渲染到屏幕外的像素缓冲区来加速渲染,当项目需要重新绘制时可以重复使用。对于某些绘图设备,缓存直接存储在图形内存中,这使得渲染非常快速。常量
描述
QGraphicsItem.NoCache
默认情况下;所有项目缓存都被禁用。
paint()
每次需要重绘项目时都会被调用。QGraphicsItem.ItemCoordinateCache
为该项目的逻辑(局部)坐标系启用了缓存。
QGraphicsItem
创建了一个可配置大小/分辨率的离屏像素缓冲区,您可以将其传递给setCacheMode()
。渲染质量通常会降低,具体取决于缓存的分辨率和项目变换。第一次重新绘制项目时,它将自身渲染到缓存中,然后缓存将在每次后续曝光时重复使用。缓存也会在项目变换时重复使用。要调整缓存的分辨率,您可以再次调用setCacheMode()
。QGraphicsItem.DeviceCoordinateCache
在绘制设备级别启用缓存,使用设备坐标。此模式适用于可以移动但未旋转、缩放或剪切的项。如果项直接或间接变换,缓存将自动重新生成。与ItemCoordinateCacheMode不同,DeviceCoordinateCache始终以最高质量渲染。
另请参阅
- class PanelModality¶
此枚举指定模态面板的行为。模态面板是阻止输入到其他面板的面板。请注意,模态面板的子项不会被阻止。
值为:
常量
描述
QGraphicsItem.NonModal
面板不是模态的,不会阻止输入到其他面板。这是面板的默认值。
QGraphicsItem.PanelModal
面板对单个项目层次结构是模态的,并阻止对其父面板、所有祖父面板以及其父面板和祖父面板的所有兄弟面板的输入。
QGraphicsItem.SceneModal
窗口对整个场景是模态的,并阻止对所有面板的输入。
在版本4.6中添加。
- class Extension¶
- __init__([parent=None])¶
- Parameters:
父级 –
QGraphicsItem
使用给定的
parent
项构造一个QGraphicsItem
。它不会修改由QObject::parent()返回的父对象。如果
parent
是None
,你可以通过调用addItem()
将项目添加到场景中。该项目将成为顶级项目。另请参阅
- acceptDrops()¶
- Return type:
布尔
如果此项目可以接受拖放事件,则返回
true
;否则,返回false
。默认情况下,项目不接受拖放事件;项目对拖放是透明的。另请参阅
- acceptHoverEvents()¶
- Return type:
布尔
如果项目接受悬停事件(
QGraphicsSceneHoverEvent
),则返回true
;否则,返回false
。默认情况下,项目不接受悬停事件。- acceptTouchEvents()¶
- Return type:
布尔
如果项目接受触摸事件,则返回
true
;否则,返回false
。默认情况下,项目不接受触摸事件。- acceptedMouseButtons()¶
- Return type:
MouseButton
的组合
返回此项目接受的鼠标事件的鼠标按钮。默认情况下,接受所有鼠标按钮。
如果一个项目接受鼠标按钮,当为该鼠标按钮传递鼠标按下事件时,它将成为鼠标抓取项目。然而,如果该项目不接受该按钮,
QGraphicsScene
会将鼠标事件转发到其下方的第一个接受该按钮的项目。- addToIndex()¶
- advance(phase)¶
- Parameters:
phase – int
这个虚函数由
advance()
槽为所有项目调用两次。在第一阶段,所有项目以phase
== 0被调用,表示场景上的项目即将前进,然后所有项目以phase
== 1被调用。如果你需要简单的场景控制动画,请重新实现此函数以更新你的项目。默认实现不执行任何操作。
此函数用于动画。另一种方法是从QObject和
QGraphicsItem
多重继承,并使用动画框架。警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
这个纯虚函数将项目的外边界定义为一个矩形;所有的绘制必须限制在项目的边界矩形内。
QGraphicsView
使用这个来确定项目是否需要重新绘制。尽管项目的形状可以是任意的,但边界矩形始终是矩形的,并且不受项目变换的影响。
如果你想更改项目的边界矩形,你必须首先调用
prepareGeometryChange()
。这会通知场景即将发生的更改,以便它可以更新其项目几何索引;否则,场景将不知道项目的新几何形状,结果是未定义的(通常,渲染伪影会留在视图中)。重新实现此函数,让
QGraphicsView
确定小部件的哪些部分(如果有)需要重新绘制。注意:对于绘制轮廓/描边的形状,重要的是在边界矩形中包含一半的笔宽。不过,不需要补偿抗锯齿。
示例:
def boundingRect(self): penWidth = 1 return QRectF(-radius - penWidth / 2, -radius - penWidth / 2, diameter + penWidth, diameter + penWidth)
- boundingRegion(itemToDeviceTransform)¶
- Parameters:
itemToDeviceTransform –
QTransform
- Return type:
返回此项目的边界区域。返回区域的坐标空间取决于
itemToDeviceTransform
。如果将单位QTransform作为参数传递,此函数将返回一个局部坐标区域。边界区域描述了项目视觉内容的粗略轮廓。尽管计算成本较高,但它比
boundingRect()
更精确,并且可以帮助避免在项目更新时进行不必要的重绘。这对于细长项目(例如,线条或简单多边形)特别有效。您可以通过调用setBoundingRegionGranularity()
来调整边界区域的粒度。默认粒度为0;在这种情况下,项目的边界区域与其边界矩形相同。itemToDeviceTransform
是从项目坐标到设备坐标的转换。如果你希望这个函数返回场景坐标中的 QRegion,你可以传递sceneTransform()
作为参数。- boundingRegionGranularity()¶
- Return type:
浮点数
返回项目的边界区域粒度;一个介于0和1之间的值,包括0和1。默认值为0(即最低粒度,其中边界区域对应于项目的边界矩形)。
返回此项目的缓存模式。默认模式是
NoCache
(即缓存被禁用,所有绘制都是立即进行的)。另请参阅
- childItems()¶
- Return type:
返回此项目的子项列表。
项目按堆叠顺序排序。这考虑了项目的插入顺序及其Z值。
另请参阅
返回该项的后代(即其子项、子项的子项等)在局部坐标中的边界矩形。该矩形将包含所有映射到局部坐标后的后代。如果该项没有子项,此函数返回一个空的QRectF。
这不包括此项自身的边界矩形;它仅返回其子项的累积边界矩形。如果您需要包括此项的边界矩形,可以使用QRectF::operator|()将
boundingRect()
添加到childrenBoundingRect()中。此函数的复杂度是线性的;它通过遍历所有后代来确定返回的边界矩形的大小。
- clearFocus()¶
从项目中移除键盘输入焦点。
如果它具有焦点,则会向该项目发送一个
focus out event
,以告知它即将失去焦点。只有设置了
ItemIsFocusable
标志的项目,或者设置了适当焦点策略的小部件,才能接受键盘焦点。- clipPath()¶
- Return type:
返回此项目的裁剪路径,如果此项目未被裁剪,则返回一个空的QPainterPath。裁剪路径限制了项目的外观和交互(即,限制了项目可以绘制的区域和接收事件的区域)。
您可以通过设置
ItemClipsToShape
或ItemClipsChildrenToShape
标志来启用裁剪。项目的裁剪路径是通过与所有裁剪祖先的形状相交来计算的。如果项目设置了ItemClipsToShape
,最终的裁剪将与项目自身的形状相交。- collidesWithItem(other[, mode=Qt.IntersectsItemShape])¶
- Parameters:
其他 –
QGraphicsItem
mode –
ItemSelectionMode
- Return type:
布尔
如果此项目与
other
发生碰撞,则返回true
;否则返回false
。mode
被应用于other
,然后将生成的形状或边界矩形与此项目的形状进行比较。mode
的默认值是 Qt::IntersectsItemShape;如果other
与此项目的形状相交、包含或被包含,则它与该项目发生碰撞(详见 Qt::ItemSelectionMode)。默认实现基于形状交集,并在两个项目上调用
shape()
。由于当形状复杂时,任意形状-形状交集的复杂性会以数量级增长,此操作可能会显著耗时。您可以选择在QGraphicsItem
的子类中重新实现此函数,以提供自定义算法。这使您能够利用自己项目形状中的自然约束,以提高碰撞检测的性能。例如,通过比较它们的位置和半径,可以非常高效地确定两个未变换的完美圆形项目的碰撞。请记住,在重新实现此函数并调用
shape()
或boundingRect()
时,返回的坐标必须映射到此项目的坐标系中,然后才能进行任何交集操作。另请参阅
- collidesWithPath(path[, mode=Qt.IntersectsItemShape])¶
- Parameters:
路径 –
QPainterPath
mode –
ItemSelectionMode
- Return type:
布尔
如果此项目与
path
发生碰撞,则返回true
。碰撞由
mode
决定。mode
的默认值是Qt::IntersectsItemShape;如果path
与此项目的形状相交、包含或被包含,则path
与此项目发生碰撞。请注意,此函数检查项目的形状或边界矩形(取决于
mode
)是否包含在path
内,而不是检查path
是否包含在项目的形状或边界矩形内。- collidingItems([mode=Qt.IntersectsItemShape])¶
- Parameters:
mode –
ItemSelectionMode
- Return type:
返回与此项目碰撞的所有项目的列表。
碰撞检测的方式是通过将
mode
应用于与此项目进行比较的项目来确定的,即每个项目的形状或边界矩形都会与此项目的形状进行检查。mode
的默认值是Qt::IntersectsItemShape。另请参阅
- commonAncestorItem(other)¶
- Parameters:
其他 –
QGraphicsItem
- Return type:
返回此项目和
other
的最接近的共同祖先项目,如果other
为None
,或者没有共同祖先,则返回None
。另请参阅
如果此项目包含
point
(在本地坐标中),则返回true
;否则返回false。它最常从QGraphicsView
调用,以确定光标下的项目,因此,此函数的实现应尽可能轻量。默认情况下,此函数调用
shape()
,但你可以在子类中重新实现它以提供(可能更高效的)实现。- contextMenuEvent(event)¶
- Parameters:
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
此事件处理程序可以在子类中重新实现以处理上下文菜单事件。
event
参数包含有关要处理的事件的详细信息。如果您忽略事件(即通过调用QEvent::ignore()),
event
将传播到此项目下方的任何项目。如果没有项目接受该事件,它将被场景忽略并传播到视图。通常,在接收到上下文菜单事件时打开一个
QMenu
是常见的做法。示例:def contextMenuEvent(self, event): menu = QMenu() removeAction = menu.addAction("Remove") markAction = menu.addAction("Mark") selectedAction = menu.exec(event.screenPos()) # ...
默认实现忽略该事件。
另请参阅
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
返回项目的当前光标形状。当鼠标悬停在此项目上时,鼠标光标将呈现此形状。请参阅预定义光标对象列表以获取一系列有用的形状。
编辑器项目可能想要使用I型光标:
item.setCursor(Qt.IBeamCursor)
如果没有设置光标,则使用下方项目的光标。
- data(key)¶
- Parameters:
key – int
- Return type:
对象
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
返回此项目为键
key
的自定义数据作为QVariant。自定义项目数据对于在任何项目中存储任意属性非常有用。示例:
ObjectName = 0 item = scene.itemAt(100, 50) if item.data(ObjectName).toString().isEmpty(): if ButtonItem(item): item.setData(ObjectName, "Button")
Qt 不使用此功能来存储数据;它仅为了方便用户而提供。
另请参阅
- deviceTransform(viewportTransform)¶
- Parameters:
viewportTransform –
QTransform
- Return type:
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
返回此项目的设备变换矩阵,使用
viewportTransform
将场景坐标映射到设备坐标。此矩阵可用于将此项目的局部坐标系中的坐标和几何形状映射到视口(或任何设备)的坐标系。要从视口映射坐标,您必须首先反转返回的矩阵。示例:
rect = QGraphicsRectItem() rect.setPos(100, 100) rect.deviceTransform(view.viewportTransform()).map(QPointF(0, 0)) # returns the item's (0, 0) point in view's viewport coordinates rect.deviceTransform(view.viewportTransform()).inverted().map(QPointF(100, 100)) # returns view's viewport's (100, 100) coordinate in item coordinates
此函数与将此项目的场景变换与视图的视口变换组合相同,但它还理解
ItemIgnoresTransformations
标志。设备变换可用于对不可变换的项目进行精确的坐标映射(和碰撞检测)。- dragEnterEvent(event)¶
- Parameters:
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的拖拽进入事件。当光标进入项目的区域时,会生成拖拽进入事件。通过接受事件(即通过调用QEvent::accept()),项目将接受放置事件,此外还会接收拖动移动和拖动离开事件。否则,事件将被忽略并传播到下方的项目。如果事件被接受,项目将在控制返回到事件循环之前接收到一个拖动移动事件。
dragEnterEvent 的一个常见实现是接受或忽略
event
,这取决于event
中关联的 mime 数据。示例:def __init__(self): setAcceptDrops(True) ... def dragEnterEvent(self, event): event.setAccepted(event.mimeData().hasFormat("text/plain"))
默认情况下,项目不会接收拖放事件;要启用此功能,请调用
setAcceptDrops(true)
。默认实现不执行任何操作。
- dragLeaveEvent(event)¶
- Parameters:
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的拖拽离开事件。当光标离开项目的区域时,会生成拖拽离开事件。大多数情况下,您不需要重新实现此函数,但它对于重置项目中的状态(例如,高亮显示)非常有用。在
event
上调用QEvent::ignore()或QEvent::accept()没有效果。默认情况下,项目不会接收拖放事件;要启用此功能,请调用
setAcceptDrops(true)
。默认实现不执行任何操作。
- dragMoveEvent(event)¶
- Parameters:
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的拖动移动事件。当光标在项目区域内移动时,会生成拖动移动事件。大多数情况下,您不需要重新实现此函数;它用于指示只有项目的某些部分可以接受放置。在
event
上调用QEvent::ignore()或QEvent::accept()会切换项目是否接受从事件位置开始的拖放。默认情况下,event
是被接受的,表示项目允许在指定位置进行拖放。默认情况下,项目不会接收拖放事件;要启用此功能,请调用
setAcceptDrops(true)
。默认实现不执行任何操作。
- dropEvent(event)¶
- Parameters:
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的拖放事件。只有在最后一个拖动移动事件被接受的情况下,项目才能接收拖放事件。在
event
上调用QEvent::ignore()或QEvent::accept()没有效果。默认情况下,项目不会接收拖放事件;要启用此功能,请调用
setAcceptDrops(true)
。默认实现不执行任何操作。
- effectiveOpacity()¶
- Return type:
浮点数
返回此项目的有效不透明度,其值介于0.0(透明)和1.0(不透明)之间。此值是该项目的局部不透明度与其父级和祖先的不透明度的组合。有效不透明度决定了项目的渲染方式。
- ensureVisible([rect=QRectF()[, xmargin=50[, ymargin=50]]])¶
- Parameters:
rect –
QRectF
xmargin – int
ymargin – int
如果此项是
QGraphicsView
查看的场景的一部分,此便捷函数将尝试滚动视图以确保rect
在视图的视口中可见。如果rect
是空矩形(默认值),QGraphicsItem
将默认使用项的边界矩形。xmargin
和ymargin
是视图应使用的边距像素数。如果无法到达指定的矩形,内容将滚动到最近的有效位置。
如果此项目未被
QGraphicsView
查看,此函数不执行任何操作。另请参阅
- ensureVisible(x, y, w, h[, xmargin=50[, ymargin=50]])
- Parameters:
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
xmargin – int
ymargin – int
这个便捷函数等同于调用
ensureVisible
(QRectF(x
,y
,w
,h
),xmargin
,ymargin
)。- extension(variant)¶
- Parameters:
variant – 对象
- Return type:
对象
- filtersChildEvents()¶
- Return type:
布尔
如果此项目过滤子事件(即,所有意图发送给其任何子事件的事件都被发送到此项目),则返回
true
;否则,返回false。默认值为false;子事件不会被过滤。
- flags()¶
- Return type:
GraphicsItemFlag
的组合
返回此项目的标志。标志描述了项目的哪些可配置功能已启用或未启用。例如,如果标志包括
ItemIsFocusable
,则该项目可以接受输入焦点。默认情况下,没有启用任何标志。
另请参阅
- focusInEvent(event)¶
- Parameters:
事件 –
QFocusEvent
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的事件焦点。默认实现调用ensureVisible()
。- focusItem()¶
- Return type:
如果此项或其子项或后代项当前具有输入焦点,此函数将返回指向该项的指针。如果没有后代具有输入焦点,则返回
None
。- focusOutEvent(event)¶
- Parameters:
事件 –
QFocusEvent
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的焦点离开事件。默认实现不执行任何操作。- focusProxy()¶
- Return type:
返回此项目的焦点代理,如果此项目没有焦点代理,则返回
None
。- focusScopeItem()¶
- Return type:
- grabKeyboard()¶
获取键盘输入。
该项目将接收场景中的所有键盘输入,直到发生以下事件之一:
该项目变得不可见
该项目已从场景中移除
该项目已被删除
该项目调用
ungrabKeyboard()
另一个项目调用 grabKeyboard(); 当其他项目调用
ungrabKeyboard()
时,该项目将重新获得键盘抓取。
当一个项目获得键盘抓取时,它会收到一个QEvent::GrabKeyboard事件。当它失去键盘抓取时,它会收到一个QEvent::UngrabKeyboard事件。这些事件可以用来检测您的项目何时通过获得输入焦点以外的其他方式获得或失去键盘抓取。
在Qt中,几乎不需要显式地获取键盘,因为Qt会合理地获取和释放它。特别是,当您的项目获得输入焦点时,Qt会获取键盘,当您的项目失去输入焦点或项目被隐藏时,Qt会释放键盘。
请注意,只有可见的项目才能获取键盘输入。在不可见的项目上调用grabKeyboard()没有效果。
键盘事件不受影响。
- grabMouse()¶
获取鼠标输入。
该项目将接收场景的所有鼠标事件,直到发生以下任一事件:
该项目变得不可见
该项目已从场景中移除
该项目已被删除
项目调用
ungrabMouse()
另一个项目调用 grabMouse(); 当其他项目调用
ungrabMouse()
时,该项目将重新获得鼠标抓取。
当一个项目获得鼠标抓取时,它会接收到一个QEvent::GrabMouse事件。当它失去鼠标抓取时,它会接收到一个QEvent::UngrabMouse事件。这些事件可以用来检测您的项目何时通过接收鼠标按钮事件以外的其他方式获得或失去鼠标抓取。
在Qt中几乎不需要显式地抓取鼠标,因为Qt会智能地抓取和释放它。特别是,当您按下鼠标按钮时,Qt会抓取鼠标,并在您释放最后一个鼠标按钮之前保持鼠标抓取状态。此外,Qt::Popup小部件在显示时会隐式调用grabMouse(),在隐藏时会调用
ungrabMouse()
。请注意,只有可见的项目才能捕获鼠标输入。在不可见的项目上调用grabMouse()没有效果。
键盘事件不受影响。
- graphicsEffect()¶
- Return type:
如果该项有效果,则返回指向该效果的指针;否则返回
None
。另请参阅
- group()¶
- Return type:
返回指向此项所属项目组的指针,如果此项不是组的成员,则返回
None
。- handlesChildEvents()¶
- Return type:
布尔
如果此项目处理子事件(即,所有意图为其任何子项的事件都被发送到此项目),则返回
true
;否则,返回false。此属性对项目组非常有用;它允许一个项目代表其子项目处理事件,而不是其子项目各自处理自己的事件。
默认情况下返回false;子项处理自己的事件。例外情况是如果项目是
QGraphicsItemGroup
,则默认返回true。- hasCursor()¶
- Return type:
布尔
如果此项设置了光标,则返回
true
;否则,返回false。默认情况下,项目没有任何光标设置。
cursor()
将返回一个标准的指向箭头光标。另请参阅
- hasFocus()¶
- Return type:
布尔
如果此项处于活动状态,并且它或其
focus proxy
具有键盘输入焦点,则返回true
;否则,返回false
。- hide()¶
隐藏项目(项目默认是可见的)。
这个便捷函数等同于调用
setVisible(false)
。另请参阅
- hoverEnterEvent(event)¶
- Parameters:
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的悬停进入事件。默认实现调用update()
;否则它不执行任何操作。在
event
上调用QEvent::ignore()或QEvent::accept()没有效果。- hoverLeaveEvent(event)¶
- Parameters:
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的悬停离开事件。默认实现调用update()
;否则它不执行任何操作。在
event
上调用QEvent::ignore()或QEvent::accept()没有效果。- hoverMoveEvent(event)¶
- Parameters:
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的悬停移动事件。默认实现不执行任何操作。在
event
上调用QEvent::ignore()或QEvent::accept()没有效果。- inputMethodEvent(event)¶
- Parameters:
事件 –
QInputMethodEvent
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的输入法事件。默认实现忽略该事件。- inputMethodHints()¶
- Return type:
InputMethodHint
的组合
返回此项目的当前输入法提示。
输入法提示仅与输入项相关。输入法使用这些提示来指示其应如何操作。例如,如果设置了Qt::ImhNumbersOnly标志,输入法可能会更改其视觉组件以反映只能输入数字。
效果可能因输入法实现的不同而有所差异。
- inputMethodQuery(query)¶
- Parameters:
查询 –
InputMethodQuery
- Return type:
对象
此方法仅适用于输入项。输入方法使用它来查询项的一组属性,以便能够支持复杂的输入方法操作,例如支持环绕文本和重新转换。
query
指定要查询的属性。- installSceneEventFilter(filterItem)¶
- Parameters:
filterItem –
QGraphicsItem
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
为这个项目在
filterItem
上安装一个事件过滤器,导致这个项目的所有事件首先通过filterItem
的sceneEventFilter()
函数。要过滤另一个项目的事件,请将此项目安装为另一个项目的事件过滤器。示例:
scene = QGraphicsScene() ellipse = scene.addEllipse(QRectF(-10, -10, 20, 20)) line = scene.addLine(QLineF(-10, -10, 20, 20)) line.installSceneEventFilter(ellipse) # line's events are filtered by ellipse's sceneEventFilter() function. ellipse.installSceneEventFilter(line) # ellipse's events are filtered by line's sceneEventFilter() function.
一个项目只能过滤同一场景中其他项目的事件。此外,一个项目不能过滤自己的事件;相反,你可以直接重新实现
sceneEvent()
。项目必须属于一个场景,以便安装和使用场景事件过滤器。
- isActive()¶
- Return type:
布尔
如果此项处于活动状态,则返回
true
;否则返回false
。一个项目只有在场景处于活动状态时才能是活动的。如果一个项目是活动的,或者是一个活动面板的后代,那么它就是活动的。非活动面板中的项目不是活动的。
当场景没有活动面板时,不属于面板的项目会跟随场景激活。
只有活动的项目可以获得输入焦点。
- isAncestorOf(child)¶
- Parameters:
子项 –
QGraphicsItem
- Return type:
布尔
如果此项是
child
的祖先(即,如果此项是child
的父项,或者是child
父项之一的祖先),则返回true
。另请参阅
- isBlockedByModalPanel()¶
- Return type:
(retval, blockingPanel)
如果此项目被模态面板阻止,则返回
true
,否则返回false。如果blockingPanel
不为零,blockingPanel
将被设置为阻止此项目的模态面板。如果此项目未被阻止,blockingPanel
将不会被此函数设置。此函数对于不在场景中的项目总是返回
false
。- isClipped()¶
- Return type:
布尔
如果此项被裁剪,则返回
true
。如果此项设置了ItemClipsToShape
标志,或者它或其任何祖先设置了ItemClipsChildrenToShape
标志,则此项被裁剪。裁剪影响项目的外观(即绘制),以及鼠标和悬停事件的传递。
另请参阅
- isEnabled()¶
- Return type:
布尔
如果项目已启用,则返回
true
;否则,返回 false。另请参阅
这是一个重载函数。
如果
rect
被其上任何碰撞项的不透明形状完全遮挡(即具有比此项更高的Z值),则返回true
。另请参阅
- isObscured(x, y, w, h)
- Parameters:
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
- Return type:
布尔
这是一个重载函数。
这个便捷函数等同于调用
isObscured
(QRectF(x
,y
,w
,h
))。- isObscuredBy(item)¶
- Parameters:
项目 –
QGraphicsItem
- Return type:
布尔
如果此项目的边界矩形完全被
item
的不透明形状遮挡,则返回true
。基础实现将
item
的opaqueArea()
映射到此项目的坐标系中,然后检查此项目的boundingRect()
是否完全包含在映射的形状内。您可以重新实现此函数,以提供一个自定义算法来确定此项目是否被
item
遮挡。另请参阅
- isPanel()¶
- Return type:
布尔
如果项目是一个面板,则返回
true
;否则返回false
。另请参阅
- isSelected()¶
- Return type:
布尔
如果选择了此项目,则返回
true
;否则,返回false。组中的项目继承组的选择状态。
默认情况下未选择项目。
- isUnderMouse()¶
- Return type:
布尔
如果此项目当前位于其中一个视图中的鼠标光标下,则返回
true
;否则,返回 false。- isVisible()¶
- Return type:
布尔
如果项目可见,则返回
true
;否则,返回 false。请注意,项目的一般可见性与它是否实际上被
QGraphicsView
可视化无关。另请参阅
- isVisibleTo(parent)¶
- Parameters:
父级 –
QGraphicsItem
- Return type:
布尔
如果项目对
parent
可见,则返回true
;否则返回false。parent
可以是None
,在这种情况下,此函数将返回项目是否对场景可见。即使
isVisible()
为真,某个项目也可能对其祖先不可见。即使isVisible()
为假,它也可能对其祖先可见。如果任何祖先被隐藏,项目本身将被隐式隐藏,在这种情况下,此函数将返回false。另请参阅
- isWidget()¶
- Return type:
布尔
如果此项目是一个小部件(即
QGraphicsWidget
),则返回true
;否则,返回false
。- isWindow()¶
- Return type:
布尔
如果项目是
QGraphicsWidget
窗口,则返回true
,否则返回false。另请参阅
- itemChange(change, value)¶
- Parameters:
change –
GraphicsItemChange
value – 对象
- Return type:
对象
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
此虚函数由
QGraphicsItem
调用,用于通知自定义项其状态的某些部分发生了变化。通过重新实现此函数,您可以对变化做出反应,并且在某些情况下(取决于change
),可以进行调整。change
是正在更改的项目的参数。value
是新值;值的类型取决于change
。示例:
def itemChange(self, GraphicsItemChange change, QVariant value): if change == ItemPositionChange and scene(): # value is the new position. newPos = value.toPointF() rect = scene().sceneRect() if not rect.contains(newPos): # Keep the item inside the scene rect. newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left()))) newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top()))) return newPos return QGraphicsItem.itemChange(change, value)
默认实现不执行任何操作,并返回
value
。注意:某些
QGraphicsItem
函数不能在此函数的重新实现中调用;详情请参阅GraphicsItemChange
文档。另请参阅
- itemTransform(other)¶
- Parameters:
其他 –
QGraphicsItem
- Return type:
(QTransform, bool ok)
返回一个QTransform,它将坐标从该项目映射到
other
。如果ok
不为空,并且没有这样的变换,ok
所指向的布尔值将被设置为false;否则将被设置为true。此转换提供了
mapToItem()
或mapFromItem()
函数的替代方案,通过返回适当的转换,使您可以自己映射形状和坐标。当在相同的两个项目之间重复映射时,它还可以帮助您编写更高效的代码。此事件处理程序,用于事件
event
,可以重新实现以接收此项目的按键事件。默认实现会忽略该事件。如果您重新实现此处理程序,默认情况下事件将被接受。请注意,只有设置了
ItemIsFocusable
标志并且具有键盘输入焦点的项目才能接收到按键事件。此事件处理程序,用于事件
event
,可以重新实现以接收此项目的键释放事件。默认实现忽略该事件。如果您重新实现此处理程序,默认情况下事件将被接受。请注意,只有设置了
ItemIsFocusable
标志并且具有键盘输入焦点的项目才能接收按键事件。- mapFromItem(item, path)¶
- Parameters:
项目 –
QGraphicsItem
路径 –
QPainterPath
- Return type:
将路径
path
(位于item
的坐标系中)映射到此项目的坐标系,并返回映射后的路径。如果
item
是None
,此函数返回与mapFromScene()
相同的结果。- mapFromItem(item, point)
- Parameters:
项目 –
QGraphicsItem
点 –
QPointF
- Return type:
将点
point
(位于item
的坐标系中)映射到此项目的坐标系,并返回映射后的坐标。如果
item
是None
,此函数返回与mapFromScene()
相同的结果。- mapFromItem(item, polygon)
- Parameters:
项目 –
QGraphicsItem
多边形 –
QPolygonF
- Return type:
将多边形
polygon
(位于item
的坐标系中)映射到此项目的坐标系,并返回映射后的多边形。如果
item
是None
,此函数返回与mapFromScene()
相同的结果。- mapFromItem(item, rect)
- Parameters:
项目 –
QGraphicsItem
rect –
QRectF
- Return type:
将矩形
rect
(位于item
的坐标系中)映射到此项目的坐标系,并返回映射后的矩形作为多边形。如果
item
是None
,此函数返回与mapFromScene()
相同的结果- mapFromItem(item, x, y)
- Parameters:
项目 –
QGraphicsItem
x – 浮点数
y – 浮点数
- Return type:
这是一个重载函数。
这个便捷函数等同于调用
mapFromItem
(item
, QPointF(x
,y
))。- mapFromItem(item, x, y, w, h)
- Parameters:
项目 –
QGraphicsItem
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
- Return type:
这个便捷函数等同于调用
mapFromItem
(item, QRectF(x
,y
,w
,h
))。- mapFromParent(path)¶
- Parameters:
路径 –
QPainterPath
- Return type:
将路径
path
从该项目的父坐标系映射到该项目的坐标系,并返回映射后的路径。将点
point
(位于此项目的父坐标系中)映射到此项目的坐标系,并返回映射后的坐标。将多边形
polygon
从该项目的父坐标系映射到该项目的坐标系,并返回映射后的多边形。将矩形
rect
(位于此项目的父坐标系中)映射到此项目的坐标系,并返回映射后的矩形作为多边形。- mapFromParent(x, y)
- Parameters:
x – 浮点数
y – 浮点数
- Return type:
这是一个重载函数。
这个便捷函数等同于调用
mapFromParent
(QPointF(x
,y
))。- mapFromParent(x, y, w, h)
- Parameters:
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
- Return type:
这个便捷函数等同于调用
mapFromItem
(QRectF(x
,y
,w
,h
))。- mapFromScene(path)¶
- Parameters:
路径 –
QPainterPath
- Return type:
将路径
path
映射到此项目的坐标系中,并返回映射后的路径。该路径在此项目的场景坐标系中。将点
point
(位于此项目的场景坐标系中)映射到此项目的坐标系,并返回映射后的坐标。将多边形
polygon
从该项目的场景坐标系映射到该项目的坐标系,并返回映射后的多边形。将矩形
rect
(位于该项目的场景坐标系中)映射到该项目的坐标系,并返回映射后的矩形作为多边形。- mapFromScene(x, y)
- Parameters:
x – 浮点数
y – 浮点数
- Return type:
这是一个重载函数。
这个便捷函数等同于调用
mapFromScene
(QPointF(x
,y
))。- mapFromScene(x, y, w, h)
- Parameters:
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
- Return type:
这个便捷函数等同于调用
mapFromScene
(QRectF(x
,y
,w
,h
))。- mapRectFromItem(item, rect)¶
- Parameters:
项目 –
QGraphicsItem
rect –
QRectF
- Return type:
将矩形
rect
(位于item
的坐标系中)映射到此项目的坐标系,并返回映射后的矩形作为新矩形(即结果多边形的边界矩形)。如果
item
是None
,此函数返回与mapRectFromScene()
相同的结果。- mapRectFromItem(item, x, y, w, h)
- Parameters:
项目 –
QGraphicsItem
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
- Return type:
这个便捷函数等同于调用
mapRectFromItem
(item, QRectF(x
,y
,w
,h
))。将矩形
rect
(位于此项目的父坐标系中)映射到此项目的坐标系,并返回映射后的矩形作为新矩形(即结果多边形的边界矩形)。- mapRectFromParent(x, y, w, h)
- Parameters:
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
- Return type:
这个便捷函数等同于调用
mapRectFromParent
(QRectF(x
,y
,w
,h
))。将场景坐标中的矩形
rect
映射到此项目的坐标系中,并返回映射后的矩形作为新矩形(即结果多边形的边界矩形)。- mapRectFromScene(x, y, w, h)
- Parameters:
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
- Return type:
这个便捷函数等同于调用
mapRectFromScene
(QRectF(x
,y
,w
,h
))。- mapRectToItem(item, rect)¶
- Parameters:
项目 –
QGraphicsItem
rect –
QRectF
- Return type:
将矩形
rect
(位于此项目的坐标系中)映射到item
的坐标系,并返回映射后的矩形作为新矩形(即结果多边形的边界矩形)。如果
item
是None
,此函数返回与mapRectToScene()
相同的结果。- mapRectToItem(item, x, y, w, h)
- Parameters:
项目 –
QGraphicsItem
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
- Return type:
这个便捷函数等同于调用
mapRectToItem
(item, QRectF(x
,y
,w
,h
))。将矩形
rect
(位于此项目的坐标系中)映射到其父坐标系,并返回映射后的矩形作为新矩形(即结果多边形的边界矩形)。- mapRectToParent(x, y, w, h)
- Parameters:
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
- Return type:
这个便捷函数等同于调用
mapRectToParent
(QRectF(x
,y
,w
,h
))。将矩形
rect
(位于此项目的坐标系中)映射到场景坐标系,并返回映射后的矩形作为新矩形(即结果多边形的边界矩形)。- mapRectToScene(x, y, w, h)
- Parameters:
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
- Return type:
这个便捷函数等同于调用
mapRectToScene
(QRectF(x
,y
,w
,h
))。- mapToItem(item, path)¶
- Parameters:
项目 –
QGraphicsItem
路径 –
QPainterPath
- Return type:
将路径
path
(位于此项目的坐标系中)映射到item
的坐标系,并返回映射后的路径。如果
item
是None
,此函数返回与mapToScene()
相同的结果。- mapToItem(item, point)
- Parameters:
项目 –
QGraphicsItem
点 –
QPointF
- Return type:
将点
point
(位于此项目的坐标系中)映射到item
的坐标系,并返回映射后的坐标。如果
item
是None
,此函数返回与mapToScene()
相同的结果。- mapToItem(item, polygon)
- Parameters:
项目 –
QGraphicsItem
多边形 –
QPolygonF
- Return type:
将多边形
polygon
(位于此项目的坐标系中)映射到item
的坐标系,并返回映射后的多边形。如果
item
是None
,此函数返回与mapToScene()
相同的结果。- mapToItem(item, rect)
- Parameters:
项目 –
QGraphicsItem
rect –
QRectF
- Return type:
将矩形
rect
(位于此项目的坐标系中)映射到item
的坐标系,并返回映射后的矩形作为多边形。如果
item
是None
,此函数返回与mapToScene()
相同的结果。- mapToItem(item, x, y)
- Parameters:
项目 –
QGraphicsItem
x – 浮点数
y – 浮点数
- Return type:
这是一个重载函数。
这个便捷函数等同于调用
mapToItem
(item
, QPointF(x
,y
))。- mapToItem(item, x, y, w, h)
- Parameters:
项目 –
QGraphicsItem
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
- Return type:
这个便捷函数等同于调用
mapToItem
(item, QRectF(x
,y
,w
,h
))。- mapToParent(path)¶
- Parameters:
路径 –
QPainterPath
- Return type:
将路径
path
(位于此项目的坐标系中)映射到其父级的坐标系,并返回映射后的路径。如果该项目没有父级,path
将被映射到场景的坐标系。将点
point
(位于此项目的坐标系中)映射到其父级的坐标系,并返回映射后的坐标。如果该项目没有父级,point
将被映射到场景的坐标系。将多边形
polygon
从该项目的坐标系映射到其父级的坐标系,并返回映射后的多边形。如果该项目没有父级,polygon
将被映射到场景的坐标系。将矩形
rect
(位于此项目的坐标系中)映射到其父级的坐标系,并返回映射后的矩形作为多边形。如果项目没有父级,rect
将被映射到场景的坐标系。- mapToParent(x, y)
- Parameters:
x – 浮点数
y – 浮点数
- Return type:
这是一个重载函数。
这个便捷函数等同于调用
mapToParent
(QPointF(x
,y
))。- mapToParent(x, y, w, h)
- Parameters:
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
- Return type:
这个便捷函数等同于调用
mapToParent
(QRectF(x
,y
,w
,h
))。- mapToScene(path)¶
- Parameters:
路径 –
QPainterPath
- Return type:
将路径
path
(位于此项目的坐标系中)映射到场景的坐标系,并返回映射后的路径。将点
point
(位于此项目的坐标系中)映射到场景的坐标系,并返回映射后的坐标。将多边形
polygon
从该项目的坐标系映射到场景的坐标系,并返回映射后的多边形。将矩形
rect
(位于此项目的坐标系中)映射到场景的坐标系,并返回映射后的矩形作为多边形。- mapToScene(x, y)
- Parameters:
x – 浮点数
y – 浮点数
- Return type:
这是一个重载函数。
这个便捷函数等同于调用
mapToScene
(QPointF(x
,y
))。- mapToScene(x, y, w, h)
- Parameters:
x – 浮点数
y – 浮点数
w – 浮点数
h – 浮点数
- Return type:
这个便捷函数等同于调用
mapToScene
(QRectF(x
,y
,w
,h
))。- mouseDoubleClickEvent(event)¶
- Parameters:
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的鼠标双击事件。当双击一个项目时,该项目首先会接收到一个鼠标按下事件,接着是一个释放事件(即点击),然后是一个双击事件,最后是一个释放事件。
在
event
上调用QEvent::ignore()或QEvent::accept()没有效果。默认实现调用
mousePressEvent()
。如果你想在重新实现此函数时保留基础实现,请在重新实现中调用 QGraphicsItem::mouseDoubleClickEvent()。请注意,如果一个项目既不是
selectable
也不是movable
,它将不会接收到双击事件(在这种情况下,单次鼠标点击会被忽略,从而阻止了双击事件的生成)。- mouseMoveEvent(event)¶
- Parameters:
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的鼠标移动事件。如果您确实接收到此事件,您可以确定此项目也接收到了鼠标按下事件,并且此项目是当前的鼠标抓取器。在
event
上调用QEvent::ignore()或QEvent::accept()没有效果。默认实现处理基本的项目交互,例如选择和移动。如果您希望在重新实现此函数时保留基本实现,请在您的重新实现中调用QGraphicsItem::mouseMoveEvent()。
请注意,
mousePressEvent()
决定了哪个图形项接收鼠标事件。详情请参阅mousePressEvent()
的描述。- mousePressEvent(event)¶
- Parameters:
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的鼠标按下事件。鼠标按下事件仅传递给接受按下的鼠标按钮的项目。默认情况下,项目接受所有鼠标按钮,但您可以通过调用setAcceptedMouseButtons()
来更改此设置。鼠标按下事件决定哪个项目应该成为鼠标抓取器(参见
mouseGrabberItem()
)。如果你不重新实现这个函数,按下事件将传播到此项目下方的任何最顶层项目,并且不会将此项目的其他鼠标事件传递给它。如果你重新实现这个函数,
event
默认会被接受(参见 QEvent::accept()),然后这个项目将成为鼠标抓取器。这使得该项目能够接收未来的移动、释放和双击事件。如果你在event
上调用 QEvent::ignore(),这个项目将失去鼠标抓取,event
将传播到下方的任何顶层项目。除非接收到新的鼠标按下事件,否则不会再向该项目传递任何鼠标事件。默认实现处理基本的项目交互,例如选择和移动。如果您希望在重新实现此函数时保留基本实现,请在您的重新实现中调用QGraphicsItem::mousePressEvent()。
对于既不是
movable
也不是selectable
的项目,事件将被QEvent::ignore()忽略。- mouseReleaseEvent(event)¶
- Parameters:
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的鼠标释放事件。在
event
上调用QEvent::ignore()或QEvent::accept()没有效果。默认实现处理基本的项目交互,例如选择和移动。如果您希望在重新实现此函数时保留基本实现,请在您的重新实现中调用QGraphicsItem::mouseReleaseEvent()。
请注意,
mousePressEvent()
决定了哪个图形项接收鼠标事件。详情请参阅mousePressEvent()
的描述。- moveBy(dx, dy)¶
- Parameters:
dx – 浮点数
dy – 浮点数
将项目水平移动
dx
点,垂直移动dy
点。此函数等同于调用setPos
(pos()
+ QPointF(dx
,dy
))。- opacity()¶
- Return type:
浮点数
返回此项目的本地不透明度,其值介于0.0(透明)和1.0(不透明)之间。此值与父级和祖先级的值组合成
effectiveOpacity()
。有效不透明度决定了项目的渲染方式,并且在通过items()
等函数查询时也会影响其可见性。opacity属性决定了传递给
paint()
函数的画家的状态。如果项目被缓存,即ItemCoordinateCache
或DeviceCoordinateCache
,则在渲染项目时,有效属性将应用于项目的缓存。默认不透明度为1.0;完全不透明。
- opaqueArea()¶
- Return type:
此虚拟函数返回一个表示该项目不透明区域的形状。如果一个区域使用不透明的画笔或颜色填充(即不透明),则该区域是不透明的。
此函数由
isObscuredBy()
使用,该函数由底层项目调用,以确定它们是否被此项目遮挡。默认实现返回一个空的QPainterPath,表示该项完全透明,不会遮挡任何其他项。
- abstract paint(painter, option[, widget=None])¶
- Parameters:
画家 –
QPainter
option –
QStyleOptionGraphicsItem
widget –
QWidget
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
此函数通常由
QGraphicsView
调用,用于在局部坐标中绘制项目的内容。在
QGraphicsItem
子类中重新实现此函数,以使用painter
提供项目的绘制实现。option
参数为项目提供了样式选项,例如其状态、暴露区域和其细节提示级别。widget
参数是可选的。如果提供,它指向正在绘制的窗口小部件;否则,它为0。对于缓存绘制,widget
始终为0。def paint(self, painter,): QStyleOptionGraphicsItem option, QWidget widget) painter.drawRoundedRect(-10, -10, 20, 20, 5, 5)
画家的笔默认宽度为0,其笔从绘制设备的调色板中初始化为QPalette::Text画笔。画笔初始化为QPalette::Window。
确保将所有绘制限制在
boundingRect()
的边界内,以避免渲染伪影(因为QGraphicsView
不会为你裁剪绘制器)。特别是,当QPainter使用指定的QPen渲染形状的轮廓时,轮廓的一半将绘制在外部,另一半将绘制在你正在渲染的形状内部(例如,使用2单位宽度的笔,你必须在boundingRect()
内部1单位处绘制轮廓)。QGraphicsItem
不支持使用非零宽度的装饰笔。所有的绘画都是在局部坐标系中完成的。
注意
除非调用了
update()
,否则一个项目必须始终以完全相同的方式重新绘制自己;否则可能会出现视觉伪影。换句话说,除非在它们之间调用了update()
,否则两次连续的paint()调用必须始终产生相同的输出。注意
启用项目的缓存并不保证Graphics View框架只会调用一次paint(),即使没有显式调用
update()
。有关更多详细信息,请参阅setCacheMode()
的文档。- panel()¶
- Return type:
返回项目的面板,如果该项目没有面板,则返回
None
。如果项目本身是一个面板,它将返回自身。否则,它将返回最接近的面板祖先。另请参阅
- panelModality()¶
- Return type:
返回此项目的模态。
另请参阅
- parentItem()¶
- Return type:
返回指向此项的父项的指针。如果此项没有父项,则返回
None
。- parentObject()¶
- Return type:
返回指向项目父级的指针,强制转换为
QGraphicsObject
。如果父项目不是QGraphicsObject
,则返回None
。另请参阅
- parentWidget()¶
- Return type:
返回指向项目父窗口小部件的指针。项目的父窗口小部件是最近的父项目,它是一个窗口小部件。
另请参阅
返回项目在父坐标中的位置。如果项目没有父级,则其位置以场景坐标给出。
项目的位置描述了其在父坐标系中的原点(局部坐标 (0, 0));此函数返回与
mapToParent
(0, 0) 相同的结果。为了方便,你也可以调用
scenePos()
来确定项目在场景坐标中的位置,而不考虑其父级。另请参阅
- prepareGeometryChange()¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
准备项目进行几何更改。在更改项目的边界矩形之前调用此函数,以保持
QGraphicsScene
的索引最新。prepareGeometryChange() 将在必要时调用
update()
。示例:
def setRadius(self, newRadius): if radius != newRadius: prepareGeometryChange() radius = newRadius
另请参阅
- removeFromIndex()¶
- removeSceneEventFilter(filterItem)¶
- Parameters:
filterItem –
QGraphicsItem
从
filterItem
中移除此项的事件过滤器。- resetTransform()¶
将此项目的变换矩阵重置为单位矩阵或将所有变换属性重置为其默认值。这相当于调用
setTransform(QTransform())
。- rotation()¶
- Return type:
浮点数
返回绕Z轴的顺时针旋转角度,单位为度。默认值为0(即项目未旋转)。
旋转与项目的
scale()
、transform()
和transformations()
结合,将项目的坐标系映射到父项目。另请参阅
- scale()¶
- Return type:
浮点数
返回项目的缩放比例。默认缩放比例为1.0(即项目未缩放)。
比例与项目的
rotation()
、transform()
和transformations()
结合,将项目的坐标系映射到父项目。另请参阅
- scene()¶
- Return type:
返回项目的当前场景,如果项目未存储在场景中,则返回
None
。要向场景中添加或移动项目,请调用
addItem()
。通过结合
sceneTransform()
与boundingRect()
,返回该项目在场景坐标中的边界矩形。另请参阅
此虚拟函数接收发送到此项目的事件。重新实现此函数以在事件被分派到特定的事件处理程序之前拦截事件,如
contextMenuEvent()
、focusInEvent()
、focusOutEvent()
、hoverEnterEvent()
、hoverMoveEvent()
、hoverLeaveEvent()
、keyPressEvent()
、keyReleaseEvent()
、mousePressEvent()
、mouseReleaseEvent()
、mouseMoveEvent()
和mouseDoubleClickEvent()
。如果事件被识别并处理,则返回
true
;否则(例如,如果事件类型未被识别),则返回false。event
是被拦截的事件。- sceneEventFilter(watched, event)¶
- Parameters:
watched –
QGraphicsItem
event –
QEvent
- Return type:
布尔
过滤项目的事件
watched
。event
是被过滤的事件。在子类中重新实现此函数可以使该项目用作其他项目的事件过滤器,拦截所有发送到这些项目的事件,使它们无法响应。
重新实现必须返回true以防止进一步处理给定事件,确保它不会被传递到被监视的项目,或者返回false以指示事件应由事件系统进一步传播。
返回项目在场景坐标中的位置。这相当于调用
mapToScene(0, 0)
。另请参阅
- sceneTransform()¶
- Return type:
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
返回此项目的场景变换矩阵。此矩阵可用于将此项目的局部坐标系中的坐标和几何形状映射到场景的坐标系中。要从场景映射坐标,您必须首先反转返回的矩阵。
示例:
rect = QGraphicsRectItem() rect.setPos(100, 100) rect.sceneTransform().map(QPointF(0, 0)) # returns QPointF(100, 100) rect.sceneTransform().inverted().map(QPointF(100, 100)) # returns QPointF(0, 0)
与
transform()
不同,它只返回项目的局部变换,此函数包括项目(以及任何父项)的位置和所有变换属性。另请参阅
- setAcceptDrops(on)¶
- Parameters:
on – 布尔值
如果
on
为 true,此项将接受拖放事件;否则,它对拖放事件是透明的。默认情况下,项不接受拖放事件。另请参阅
- setAcceptHoverEvents(enabled)¶
- Parameters:
enabled – 布尔值
如果
enabled
为 true,此项将接受悬停事件;否则,它将忽略这些事件。默认情况下,项不接受悬停事件。当没有当前鼠标抓取器项目时,悬停事件会被传递。当鼠标光标进入一个项目时,当它在项目内部移动时,以及当光标离开项目时,都会发送悬停事件。悬停事件通常用于在进入项目时突出显示项目,并用于跟踪鼠标光标在项目上悬停时的位置(相当于
mouseTracking
)。父项在其子项之前接收悬停进入事件,并在其子项之后接收离开事件。然而,如果光标进入子项,父项不会接收到悬停离开事件;父项保持“悬停”状态,直到光标离开其区域,包括其子项的区域。
如果父项处理子项事件,当光标经过其子项时,它将接收悬停移动、拖动移动和放置事件,但它不会代表其子项接收悬停进入和悬停离开,也不会接收拖动进入和拖动离开事件。
一个带有窗口装饰的
QGraphicsWidget
将接受悬停事件,无论acceptHoverEvents()
的值如何。- setAcceptTouchEvents(enabled)¶
- Parameters:
enabled – 布尔值
如果
enabled
为 true,此项将接受触摸事件;否则,它将忽略这些事件。默认情况下,项目不接受触摸事件。另请参阅
- setAcceptedMouseButtons(buttons)¶
- Parameters:
buttons –
MouseButton
的组合
设置此项目接受鼠标事件的鼠标
buttons
。默认情况下,所有鼠标按钮都被接受。如果一个项目接受鼠标按钮,当为该按钮传递鼠标按下事件时,它将成为鼠标抓取器项目。然而,如果该项目不接受鼠标按钮,
QGraphicsScene
会将鼠标事件转发到其下方的第一个接受该按钮的项目。要禁用项目的鼠标事件(即使其对鼠标事件透明),请调用 setAcceptedMouseButtons(Qt::NoButton)。
- setActive(active)¶
- Parameters:
active – 布尔值
如果
active
为 true,并且场景处于活动状态,则此项目的面板将被激活。否则,面板将被停用。如果项目不是活动场景的一部分,
active
将决定当场景变为活动状态或项目被添加到场景时面板会发生什么。如果为 true,当项目被添加到场景或场景被激活时,项目的面板将被激活。否则,项目将保持非活动状态,不受场景激活状态的影响。- setBoundingRegionGranularity(granularity)¶
- Parameters:
粒度 – float
将边界区域粒度设置为
granularity
;一个介于0和1之间的值(包括0和1)。默认值为0(即最低粒度,其中边界区域对应于项目的边界矩形)。粒度由
boundingRegion()
用于计算项目的边界区域应该有多精细。可达到的最高粒度为1,此时boundingRegion()
将返回设备可能的最精细轮廓(例如,对于QGraphicsView
视口,这将为您提供像素完美的边界区域)。最低可能的粒度为0。granularity
的值描述了设备分辨率与边界区域分辨率之间的比率(例如,值为0.25将提供一个区域,其中每个块对应于4x4设备单位/像素)。将项目的缓存模式设置为
mode
。可选的
logicalCacheSize
参数仅由ItemCoordinateCache
模式使用,用于描述缓存缓冲区的分辨率;如果logicalCacheSize
为 (100, 100),QGraphicsItem
将把项目适配到图形内存中的 100x100 像素,而不管项目本身的逻辑大小如何。默认情况下,QGraphicsItem
使用boundingRect()
的大小。对于除ItemCoordinateCache
之外的所有其他缓存模式,logicalCacheSize
将被忽略。如果您的项目花费大量时间重新绘制自身,缓存可以加速渲染。在某些情况下,缓存也可能减慢渲染速度,特别是当项目重新绘制的时间少于
QGraphicsItem
从缓存重新绘制的时间时。当启用缓存时,项目的
paint()
函数通常会绘制到一个离屏的像素图缓存中;对于任何后续的重绘请求,Graphics View 框架将从缓存中重新绘制。这种方法特别适用于 QGLWidget,它将所有缓存存储为 OpenGL 纹理。请注意,可能需要更改QPixmapCache的缓存限制以获得最佳性能。
您可以在
CacheMode
文档中阅读更多关于不同缓存模式的信息。注意
启用缓存并不意味着项目的
paint()
函数仅在响应显式的update()
调用时才会被调用。例如,在内存压力下,Qt可能会决定丢弃一些缓存信息;在这种情况下,即使没有update()
调用,项目的paint()
函数也会被调用(也就是说,就像没有启用缓存一样)。警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
将项目的当前光标形状设置为
cursor
。当鼠标悬停在此项目上时,鼠标光标将采用此形状。请参阅预定义光标对象列表以获取一系列有用的形状。编辑器项目可能想要使用I型光标:
item.setCursor(Qt.IBeamCursor)
如果没有设置光标,则使用下方项目的光标。
- setData(key, value)¶
- Parameters:
key – 整数
value – 对象
将此项目的自定义数据设置为键
key
的值为value
。自定义项目数据对于存储任何项目的任意属性非常有用。Qt 不使用此功能来存储数据;它仅为了方便用户而提供。
另请参阅
- setEnabled(enabled)¶
- Parameters:
enabled – 布尔值
如果
enabled
为 true,则该项启用;否则,该项禁用。禁用的项目是可见的,但它们不会接收任何事件,也无法获得焦点或被选中。鼠标事件被丢弃;除非项目也是不可见的,或者它不接受鼠标事件(参见
acceptedMouseButtons()
),否则它们不会被传播。禁用的项目不能成为鼠标抓取器,因此,如果项目在抓取鼠标时被禁用,它将失去抓取,就像它在被禁用时失去焦点一样。禁用的项目传统上使用灰色绘制(参见 QPalette::Disabled)。
如果您禁用了父项,其所有子项也将被禁用。如果您启用了父项,所有子项将被启用,除非它们已被显式禁用(即,如果您在子项上调用setEnabled(false),即使其父项被禁用然后再次启用,它也不会被重新启用)。
默认情况下,项目是启用的。
- setFiltersChildEvents(enabled)¶
- Parameters:
enabled – 布尔值
如果
enabled
为 true,则此项设置为过滤其所有子项的所有事件(即,所有意图发送给其任何子项的事件都将发送到此项);否则,如果enabled
为 false,此项将仅处理其自身的事件。默认值为 false。另请参阅
- setFlag(flag[, enabled=true])¶
- Parameters:
flag –
GraphicsItemFlag
enabled – 布尔值
如果
enabled
为 true,则项目标志flag
被启用;否则,它被禁用。另请参阅
- setFlags(flags)¶
- Parameters:
flags –
GraphicsItemFlag
的组合
将项目标志设置为
flags
。在flags
中的所有标志都被启用;不在flags
中的所有标志都被禁用。如果项目具有焦点并且
flags
未启用ItemIsFocusable
,则调用此函数后项目将失去焦点。同样,如果项目被选中,并且flags
未启用ItemIsSelectable
,则项目将自动取消选中。默认情况下,没有启用任何标志。(
QGraphicsWidget
默认启用了ItemSendsGeometryChanges
标志,以便跟踪位置变化。)- setFocus([focusReason=Qt.OtherFocusReason])¶
- Parameters:
focusReason –
FocusReason
将键盘输入焦点赋予此项目。
focusReason
参数将被传递到此函数生成的任何焦点事件中;它用于解释是什么原因导致该项目获得焦点。只有启用了设置
ItemIsFocusable
标志的项目才能接受键盘焦点。如果此项不可见、未激活或未与场景关联,则不会立即获得输入焦点。但是,它将被注册为其子项树的首选焦点项,以便在稍后变为可见时使用。
调用此函数的结果是,此项目将收到一个
focus in event
,并带有focusReason
。如果另一个项目已经拥有焦点,那么该项目将首先收到一个focus out event
,表示它已经失去了输入焦点。- setFocusProxy(item)¶
- Parameters:
项目 –
QGraphicsItem
将项目的焦点代理设置为
item
。如果一个项目有一个焦点代理,当该项目获得输入焦点时,焦点代理将接收输入焦点。项目本身仍然会有焦点(即,
hasFocus()
将返回 true),但只有焦点代理会接收键盘输入。焦点代理本身也可以有焦点代理,依此类推。在这种情况下,键盘输入将由最外层的焦点代理处理。
焦点代理
item
必须与此项目属于同一场景。- setGraphicsEffect(effect)¶
- Parameters:
效果 –
QGraphicsEffect
将
effect
设置为项目的效果。如果此项目上已经安装了一个效果,QGraphicsItem
将在安装新的effect
之前删除现有的效果。您可以通过调用setGraphicsEffect(None
)来删除现有的效果。如果
effect
是安装在不同项目上的效果,setGraphicsEffect() 将从该项目中移除该效果并将其安装在此项目上。QGraphicsItem
拥有effect
的所有权。- setGroup(group)¶
- Parameters:
将此项目添加到项目组
group
中。如果group
是None
,则将此项目从任何当前组中移除,并作为前一个组的父级的子级添加。另请参阅
- setHandlesChildEvents(enabled)¶
- Parameters:
enabled – 布尔值
如果
enabled
为 true,则此项设置为处理其所有子项的所有事件(即,所有针对其任何子项的事件都将发送到此项);否则,如果enabled
为 false,则此项仅处理其自身的事件。默认值为 false。此属性对项目组非常有用;它允许一个项目代表其子项目处理事件,而不是其子项目各自处理自己的事件。
如果子项接受悬停事件,当光标通过子项时,其父项将接收到悬停移动事件,但它不会代表其子项接收悬停进入和悬停离开事件。
另请参阅
- setInputMethodHints(hints)¶
- Parameters:
提示 –
InputMethodHint
的组合
将此项目的当前输入法提示设置为
hints
。- setOpacity(opacity)¶
- Parameters:
opacity – 浮点数
设置此项目的本地
opacity
,范围在0.0(透明)到1.0(不透明)之间。项目的本地不透明度与父级和祖先的不透明度组合成effectiveOpacity()
。默认情况下,不透明度会从父元素传播到子元素,因此如果父元素的不透明度为0.5,子元素的不透明度也为0.5,那么子元素的有效不透明度将为0.25。
opacity属性决定了传递给
paint()
函数的画家的状态。如果项目被缓存,即ItemCoordinateCache
或DeviceCoordinateCache
,则在渲染项目时,有效属性将应用于项目的缓存。有两个项目标志会影响项目的不透明度如何与父级结合:
ItemIgnoresParentOpacity
和ItemDoesntPropagateOpacityToChildren
。注意
将项目的不透明度设置为0不会使项目不可见(根据
isVisible()
),但该项目将被视为不可见。有关更多信息,请参阅setVisible()
的文档。- setPanelModality(panelModality)¶
- Parameters:
panelModality –
PanelModality
将此项目的模态设置为
panelModality
。更改可见项目的模式会立即生效。
另请参阅
- setParentItem(parent)¶
- Parameters:
父级 –
QGraphicsItem
将此项目的父项目设置为
newParent
。如果此项目已经有父项目,则首先从之前的父项目中移除。如果newParent
为0,此项目将成为顶级项目。请注意,这隐式地将此图形项添加到父场景中。您不应自己将项添加到场景中。
在调用此函数时,如果项目是
newParent
的祖先,则行为未定义。另请参阅
将项目的位置设置为
pos
,这是在父坐标中的位置。对于没有父项的项目,pos
是在场景坐标中的位置。项目的位置描述了其在父坐标系中的原点(局部坐标 (0, 0))。
另请参阅
- setPos(x, y)
- Parameters:
x – 浮点数
y – 浮点数
这是一个重载函数。
这个便捷函数等同于调用
setPos
(QPointF(x
,y
))。- setRotation(angle)¶
- Parameters:
angle – 浮点数
设置绕Z轴顺时针旋转的
角度
,单位为度。默认值为0(即项目未旋转)。赋值为负将使项目逆时针旋转。通常旋转角度在(-360, 360)范围内,但也可以赋此范围之外的值(例如,370度的旋转与10度的旋转相同)。该项目围绕其变换原点旋转,默认情况下为 (0, 0)。您可以通过调用
setTransformOriginPoint()
选择不同的变换原点。旋转与项目的
scale()
、transform()
和transformations()
结合,将项目的坐标系映射到父项目。另请参阅
- setScale(scale)¶
- Parameters:
scale – 浮点数
设置项目的
比例因子
。默认的比例因子是1.0(即项目未缩放)。比例因子为0.0将使项目缩为一个点。如果提供负的比例因子,项目将被翻转和镜像(即旋转180度)。该项目围绕其变换原点进行缩放,默认情况下为 (0, 0)。您可以通过调用
setTransformOriginPoint()
选择不同的变换原点。比例与项目的
rotation()
、transform()
和transformations()
结合,将项目的坐标系映射到父项目。另请参阅
- setSelected(selected)¶
- Parameters:
selected – 布尔值
如果
selected
为真且此项可选,则此项被选中;否则,此项未被选中。如果项目在一个组中,此函数将切换整个组的选择状态。如果组被选中,组中的所有项目也将被选中;如果组未被选中,组中的任何项目都不会被选中。
只有可见、启用、可选择的项目才能被选择。如果
selected
为真且该项目不可见、禁用或不可选择,此函数不执行任何操作。默认情况下,项目不能被选择。要启用选择功能,请设置
ItemIsSelectable
标志。此函数为方便起见提供,允许单独切换项目的选中状态。然而,选择项目的一种更常见方式是调用
setSelectionArea()
,它将为场景上指定区域内的所有可见、启用且可选择的项目调用此函数。- setToolTip(toolTip)¶
- Parameters:
toolTip – str
将项目的工具提示设置为
toolTip
。如果toolTip
为空,则清除项目的工具提示。- setTransform(matrix[, combine=false])¶
- Parameters:
matrix –
QTransform
combine – 布尔值
将项目的当前变换矩阵设置为
matrix
。如果
combine
为 true,则matrix
与当前矩阵结合;否则,matrix
替换 当前矩阵。combine
默认为 false。为了简化使用变换视图与项目的交互,
QGraphicsItem
提供了 mapTo… 和 mapFrom… 函数,可以在项目坐标和场景坐标之间进行转换。例如,你可以调用mapToScene()
将项目坐标映射到场景坐标,或者调用mapFromScene()
将场景坐标映射到项目坐标。变换矩阵与项目的
rotation()
、scale()
和transformations()
结合成一个组合变换,将项目的坐标系映射到其父级。设置变换的
origin
点在项目坐标中的位置。另请参阅
- setTransformOriginPoint(ax, ay)
- Parameters:
ax – 浮点数
ay – 浮点数
这是一个重载函数。
设置变换的原点,以项目坐标表示。这相当于调用
setTransformOriginPoint
(QPointF(x
,y
))。另请参阅
- setTransformations(transformations)¶
- Parameters:
transformations – QGraphicsTransform 的列表
设置当前应用于此项目的图形
transformations
(QGraphicsTransform
)列表。如果你只想旋转或缩放一个项目,你应该调用
setRotation()
或setScale()
。如果你想在项目上设置任意变换,你可以调用setTransform()
。QGraphicsTransform
用于在项目上应用和控制一系列单独的变换操作。它在动画中特别有用,其中每个变换操作需要独立或不同地进行插值。转换与项目的
rotation()
、scale()
和transform()
结合,将项目的坐标系映射到父项目。另请参阅
transformations()
scale()
setTransformOriginPoint()
Transformations
- setVisible(visible)¶
- Parameters:
visible – 布尔值
如果
visible
为 true,则项目将变为可见。否则,项目将变为不可见。不可见的项目不会被绘制,也不会接收任何事件。特别是,鼠标事件会直接穿过不可见的项目,并传递给可能位于后面的任何项目。不可见的项目也无法被选中,它们无法获得输入焦点,并且不会被QGraphicsScene
的项目定位函数检测到。如果某个项目在抓取鼠标时变为不可见(即,当它正在接收鼠标事件时),它将自动失去鼠标抓取,并且通过使项目再次可见不会重新获得抓取;它必须接收一个新的鼠标按下事件才能重新获得鼠标抓取。
同样,一个不可见的项目不能获得焦点,因此如果项目在变得不可见时拥有焦点,它将失去焦点,并且仅仅通过使项目再次可见并不能重新获得焦点。
如果您隐藏一个父项,其所有子项也将被隐藏。如果您显示一个父项,所有子项将被显示,除非它们已被明确隐藏(即,如果您在子项上调用setVisible(false),即使其父项被隐藏然后再次显示,它也不会重新显示)。
默认情况下,项目是可见的;在新项目上调用setVisible()是不必要的。
注意
一个不透明度设置为0的项目仍然会被视为可见,尽管它会被当作一个不可见的项目处理:鼠标事件会穿过它,它不会被包含在
items()
返回的项目中,等等。然而,该项目将保留焦点。- setX(x)¶
- Parameters:
x – 浮点数
设置项目位置的
x
坐标。等同于调用setPos
(x,y()
)。- setY(y)¶
- Parameters:
y – 浮点数
设置项目的
y
坐标位置。相当于调用setPos
(x()
, y)。- setZValue(z)¶
- Parameters:
z – 浮点数
将项目的Z值设置为
z
。Z值决定了兄弟(相邻)项目的堆叠顺序。具有较高Z值的兄弟项目将始终绘制在具有较低Z值的兄弟项目之上。如果您恢复Z值,项目的插入顺序将决定其堆叠顺序。
Z值不会以任何方式影响项目的大小。
默认的Z值为0。
- shape()¶
- Return type:
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
返回此项目在局部坐标中的形状作为QPainterPath。该形状用于许多用途,包括碰撞检测、点击测试以及
items()
函数。默认实现调用
boundingRect()
返回一个简单的矩形形状,但子类可以重新实现此函数以返回非矩形项目的更准确形状。例如,圆形项目可以选择返回椭圆形以进行更好的碰撞检测。例如:def shape(self): path = QPainterPath() path.addEllipse(boundingRect()) return path
形状的轮廓可能会根据绘制时使用的笔的宽度和样式而变化。如果您想将此轮廓包含在项目的形状中,可以使用QPainterPathStroker从笔划创建形状。
此函数由
contains()
和collidesWithPath()
的默认实现调用。- show()¶
显示项目(项目默认可见)。
这个便捷函数等同于调用
setVisible(true)
。另请参阅
- stackBefore(sibling)¶
- Parameters:
兄弟 –
QGraphicsItem
将此项目堆叠在
sibling
之前,sibling
必须是一个同级项目(即两个项目必须共享同一个父项目,或者都必须是顶级项目)。sibling
必须与此项目具有相同的Z值,否则调用此函数将无效。默认情况下,所有同级项目按插入顺序堆叠(即,您添加的第一个项目在您添加的下一个项目之前绘制)。如果两个项目的Z值不同,则Z值最高的项目绘制在顶部。当Z值相同时,插入顺序将决定堆叠顺序。
另请参阅
- toGraphicsObject()¶
- Return type:
返回图形项转换为
QGraphicsObject
,如果该类实际上是一个图形对象,否则返回0。- toolTip()¶
- Return type:
字符串
返回项目的工具提示,如果未设置工具提示,则返回空的QString。
另请参阅
- topLevelItem()¶
- Return type:
返回此项目的顶级项目。顶级项目是该项目的最顶层祖先项目,其父级为
None
。如果一个项目没有父级,则返回其自身的指针(即,顶级项目是其自身的顶级项目)。另请参阅
- topLevelWidget()¶
- Return type:
返回指向项目顶层小部件的指针(即项目的祖先,其父级为
None
,或其父级不是小部件),如果此项目没有顶层小部件,则返回None
。如果项目是其自身的顶层小部件,则此函数返回指向项目本身的指针。- transform()¶
- Return type:
返回此项目的变换矩阵。
变换矩阵与项目的
rotation()
、scale()
和transformations()
结合,形成项目的组合变换。默认的变换矩阵是一个单位矩阵。
返回变换的起点在项目坐标中的位置。
默认是 QPointF(0,0)。
另请参阅
- transformations()¶
- Return type:
返回当前应用于此项目的图形变换列表。
QGraphicsTransform
用于在项目上应用和控制一系列单独的变换操作。它在动画中特别有用,其中每个变换操作需要独立或不同地进行插值。转换与项目的
rotation()
、scale()
和transform()
结合,将项目的坐标系映射到父项目。另请参阅
setTransformations()
scale()
rotation()
transformOriginPoint()
Transformations
- type()¶
- Return type:
整数
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
返回项目的类型为整数。所有标准的图形项目类都与一个唯一的值相关联;请参见
Type
。此类型信息由qgraphicsitem_cast()
用于区分类型。默认实现(在
QGraphicsItem
中)返回UserType
。要启用与自定义项一起使用的
qgraphicsitem_cast()
,请重新实现此函数并声明一个等于自定义项类型的Type枚举值。自定义项必须返回大于或等于UserType
(65536)的值。例如:
class CustomItem(QGraphicsItem): # public enum { Type = UserType + 1 } int type() override # Enable the use of qgraphicsitem_cast with this item. return Type ...
另请参阅
UserType
- ungrabKeyboard()¶
释放键盘抓取。
- ungrabMouse()¶
释放鼠标抓取。
- unsetCursor()¶
清除此项目的光标。
另请参阅
安排重新绘制此项目中由
rect
覆盖的区域。每当您的项目需要重新绘制时,例如如果它改变外观或大小,您可以调用此函数。此函数不会立即引起绘制;相反,它会安排一个绘制请求,该请求在控制到达事件循环后由
QGraphicsView
处理。只有在任何关联视图中可见时,项目才会被重新绘制。作为项目重新绘制的副作用,与区域
rect
重叠的其他项目也可能被重新绘制。如果项目不可见(即
isVisible()
返回false
),此函数不执行任何操作。另请参阅
- update(x, y, width, height)
- Parameters:
x – 浮点数
y – 浮点数
width – 浮点数
height – 浮点数
这是一个重载函数。
这个便捷函数等同于调用 update(QRectF(
x
,y
,width
,height
))。- updateMicroFocus()¶
更新项目的微焦点。
另请参阅
- wheelEvent(event)¶
- Parameters:
此事件处理程序,用于事件
event
,可以重新实现以接收此项目的滚轮事件。如果您重新实现此函数,event
将默认被接受。如果您忽略该事件(即通过调用QEvent::ignore()),它将传播到此项目下方的任何项目。如果没有项目接受该事件,它将被场景忽略,并传播到视图(例如,视图的垂直滚动条)。
默认实现忽略该事件。
另请参阅
- window()¶
- Return type:
返回项目的窗口,如果该项目没有窗口,则返回
None
。如果项目本身是一个窗口,它将返回自身。否则,它将返回最近的窗口祖先。另请参阅
isWindow()
- x()¶
- Return type:
浮点数
这个便捷函数等同于调用
pos()
.x()。- y()¶
- Return type:
浮点数
这个便捷函数等同于调用
pos()
.y()。- zValue()¶
- Return type:
浮点数
返回项目的Z值。Z值影响兄弟(相邻)项目的堆叠顺序。
默认的Z值为0。