QQuickItem Class
QQuickItem 类提供了 Qt Quick。更多内容...
| 头文件: | #include <QQuickItem> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| 在 QML 中: | Item |
| 继承自: | QObject 以及QQmlParserStatus |
| 被继承: |
公共类型
| union | ItemChangeData |
| enum | Flag { ItemClipsChildrenToShape, ItemAcceptsInputMethod, ItemIsFocusScope, ItemHasContents, ItemAcceptsDrops, …, ItemObservesViewport } |
| flags | Flags |
| enum | ItemChange { ItemChildAddedChange, ItemChildRemovedChange, ItemSceneChange, ItemVisibleHasChanged, ItemParentHasChanged, …, ItemTransformHasChanged } |
(since 6.12) enum | MutabilityGroup { AutoMutabilityGroup, StaticMutabilityGroup, ModerateMutabilityGroup, DynamicMutabilityGroup } |
| enum | TransformOrigin { TopLeft, Top, TopRight, Left, Center, …, BottomRight } |
属性
|
公共函数
| QQuickItem(QQuickItem *parent = nullptr) | |
| virtual | ~QQuickItem() override |
| bool | acceptHoverEvents() const |
| bool | acceptTouchEvents() const |
| Qt::MouseButtons | acceptedMouseButtons() const |
| bool | activeFocusOnTab() const |
| bool | antialiasing() const |
| qreal | baselineOffset() const |
| QBindable<qreal> | bindableHeight() |
| QBindable<qreal> | bindableWidth() |
| QBindable<qreal> | bindableX() |
| QBindable<qreal> | bindableY() |
| virtual QRectF | boundingRect() const |
| QQuickItem * | childAt(qreal x, qreal y) const |
| QList<QQuickItem *> | childItems() const |
| QRectF | childrenRect() |
| bool | clip() const |
| virtual QRectF | clipRect() const |
| QObject * | containmentMask() const |
| virtual bool | contains(const QPointF &point) const |
| QCursor | cursor() const |
(since 6.3) void | dumpItemTree() const |
(since 6.3) void | ensurePolished() |
| bool | filtersChildMouseEvents() const |
| QQuickItem::Flags | flags() const |
| Qt::FocusPolicy | focusPolicy() const |
| void | forceActiveFocus() |
| void | forceActiveFocus(Qt::FocusReason reason) |
| QSharedPointer<QQuickItemGrabResult> | grabToImage(const QSize &targetSize = QSize()) |
| bool | hasActiveFocus() const |
| bool | hasFocus() const |
| qreal | height() const |
| qreal | implicitHeight() const |
| qreal | implicitWidth() const |
| virtual QVariant | inputMethodQuery(Qt::InputMethodQuery query) const |
| bool | isAncestorOf(const QQuickItem *child) const |
| bool | isEnabled() const |
| bool | isFocusScope() const |
| virtual bool | isTextureProvider() const |
| bool | isVisible() const |
| bool | keepMouseGrab() const |
| bool | keepTouchGrab() const |
| QPointF | mapFromGlobal(const QPointF &point) const |
| QPointF | mapFromItem(const QQuickItem *item, const QPointF &point) const |
| QPointF | mapFromScene(const QPointF &point) const |
| QRectF | mapRectFromItem(const QQuickItem *item, const QRectF &rect) const |
| QRectF | mapRectFromScene(const QRectF &rect) const |
| QRectF | mapRectToItem(const QQuickItem *item, const QRectF &rect) const |
| QRectF | mapRectToScene(const QRectF &rect) const |
| QPointF | mapToGlobal(const QPointF &point) const |
| QPointF | mapToItem(const QQuickItem *item, const QPointF &point) const |
| QPointF | mapToScene(const QPointF &point) const |
| int | mutabilityGroup() const |
| QQuickItem * | nextItemInFocusChain(bool forward = true) |
| qreal | opacity() const |
| QQuickItem * | parentItem() const |
| void | polish() |
| void | resetAntialiasing() |
| void | resetHeight() |
| void | resetWidth() |
| qreal | rotation() const |
| qreal | scale() const |
| QQuickItem * | scopedFocusItem() const |
| void | setAcceptHoverEvents(bool enabled) |
| void | setAcceptTouchEvents(bool enabled) |
| void | setAcceptedMouseButtons(Qt::MouseButtons buttons) |
| void | setActiveFocusOnTab(bool) |
| void | setAntialiasing(bool) |
| void | setBaselineOffset(qreal) |
| void | setClip(bool) |
| void | setContainmentMask(QObject *mask) |
| void | setCursor(const QCursor &cursor) |
| void | setEnabled(bool) |
| void | setFiltersChildMouseEvents(bool filter) |
| void | setFlag(QQuickItem::Flag flag, bool enabled = true) |
| void | setFlags(QQuickItem::Flags flags) |
| void | setFocus(bool) |
| void | setFocus(bool focus, Qt::FocusReason reason) |
| void | setFocusPolicy(Qt::FocusPolicy policy) |
| void | setHeight(qreal) |
| void | setImplicitHeight(qreal) |
| void | setImplicitWidth(qreal) |
| void | setKeepMouseGrab(bool keep) |
| void | setKeepTouchGrab(bool keep) |
| void | setMutabilityGroup(int mutabilityGroup) |
| void | setOpacity(qreal) |
| void | setParentItem(QQuickItem *parent) |
| void | setRotation(qreal) |
| void | setScale(qreal) |
| void | setSize(const QSizeF &size) |
| void | setSmooth(bool) |
| void | setState(const QString &) |
| void | setTransformOrigin(QQuickItem::TransformOrigin) |
| void | setVisible(bool) |
| void | setWidth(qreal) |
| void | setX(qreal) |
| void | setY(qreal) |
| void | setZ(qreal) |
| QSizeF | size() const |
| bool | smooth() const |
| void | stackAfter(const QQuickItem *sibling) |
| void | stackBefore(const QQuickItem *sibling) |
| QString | state() const |
| virtual QSGTextureProvider * | textureProvider() const |
| QQuickItem::TransformOrigin | transformOrigin() const |
| void | unsetCursor() |
| QQuickItem * | viewportItem() const |
| qreal | width() const |
| QQuickWindow * | window() const |
| qreal | x() const |
| qreal | y() const |
| qreal | z() const |
公共槽
| void | update() |
信号
| void | containmentMaskChanged() |
| void | windowChanged(QQuickWindow *window) |
受保护函数
| virtual bool | childMouseEventFilter(QQuickItem *item, QEvent *event) |
| virtual void | dragEnterEvent(QDragEnterEvent *event) |
| virtual void | dragLeaveEvent(QDragLeaveEvent *event) |
| virtual void | dragMoveEvent(QDragMoveEvent *event) |
| virtual void | dropEvent(QDropEvent *event) |
| virtual void | focusInEvent(QFocusEvent *event) |
| virtual void | focusOutEvent(QFocusEvent *event) |
(since 6.0) virtual void | geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) |
| bool | heightValid() const |
| virtual void | hoverEnterEvent(QHoverEvent *event) |
| virtual void | hoverLeaveEvent(QHoverEvent *event) |
| virtual void | hoverMoveEvent(QHoverEvent *event) |
| virtual void | inputMethodEvent(QInputMethodEvent *event) |
| bool | isComponentComplete() const |
| virtual void | itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value) |
| virtual void | keyPressEvent(QKeyEvent *event) |
| virtual void | keyReleaseEvent(QKeyEvent *event) |
| virtual void | mouseDoubleClickEvent(QMouseEvent *event) |
| virtual void | mouseMoveEvent(QMouseEvent *event) |
| virtual void | mousePressEvent(QMouseEvent *event) |
| virtual void | mouseReleaseEvent(QMouseEvent *event) |
| virtual void | mouseUngrabEvent() |
| virtual void | releaseResources() |
| virtual void | touchEvent(QTouchEvent *event) |
| virtual void | touchUngrabEvent() |
| void | updateInputMethod(Qt::InputMethodQueries queries = Qt::ImQueryInput) |
| virtual QSGNode * | updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *updatePaintNodeData) |
| virtual void | updatePolish() |
| virtual void | wheelEvent(QWheelEvent *event) |
| bool | widthValid() const |
重新实现的受保护函数
| virtual void | classBegin() override |
| virtual void | componentComplete() override |
| virtual bool | event(QEvent *ev) override |
详细说明
Qt Quick 中的所有视觉项都继承自 QQuickItem。尽管 QQuickItem 实例本身没有视觉外观,但它定义了所有视觉项共有的属性,例如 x 和 y 位置、宽度和高度、锚定以及键处理支持。
您可以通过继承 QQuickItem 来提供自己的自定义视觉项,使其继承这些特性。
自定义场景图项
所有视觉 QML 项均通过场景图进行渲染,其默认实现是一个低级、高性能的渲染堆栈,与 OpenGL、Vulkan、Metal 或 Direct 3D 等加速图形 API 紧密关联。 QQuickItem 的子类可以通过设置QQuickItem::ItemHasContents 标志并重写QQuickItem::updatePaintNode()函数,将自己的自定义内容添加到场景图中。
警告: 图形操作以及与场景图的交互必须 仅在渲染线程上进行,主要是在调用updatePaintNode() 期间。最佳经验法则是:仅在QQuickItem::updatePaintNode() 函数内部使用以“QSG”为前缀的类。
注意:所有 以 QSG 为前缀的类都应仅在场景图的渲染线程上使用。有关详细信息,请参阅“场景图与渲染”。
图形资源处理
处理场景图中使用的图形资源清理的首选方法是依赖节点的自动清理机制。由QQuickItem::updatePaintNode() 返回的QSGNode 将在正确的时间由正确的线程自动删除。QSGNode 实例的树结构通过QSGNode::OwnedByParent 进行管理,该选项默认已启用。因此,对于大多数自定义场景图项,无需额外操作。
将图形资源存储在节点树之外的实现(例如实现QQuickItem::textureProvider() 的项)需要根据该项在 QML 中的使用方式,谨慎地进行正确的清理。需要处理的情况包括:
- 场景图失效;根据平台和QQuickWindow 配置的不同,这可能发生在通过QQuickWindow::hide()隐藏窗口时,或窗口关闭时。如果项类实现了名为
invalidateSceneGraph()的slot,则该slot将在渲染线程上被调用,而GUI线程此时会被阻塞。这相当于连接到QQuickWindow::sceneGraphInvalidated()。 当通过 OpenGL 进行渲染时,调用此槽时将绑定该项窗口的 OpenGL 上下文。唯一的例外是,如果原生 OpenGL 已在 Qt 控制范围之外被销毁,例如通过EGL_CONTEXT_LOST。 - 该项从场景中移除;如果某项被移出场景(例如因为其父项被设置为
null,或者该项位于另一个窗口中),则会在GUI线程上调用QQuickItem::releaseResources()。应使用QQuickWindow::scheduleRenderJob()来安排渲染资源的清理工作。 - 该项被删除;当某项的析构函数运行时,应删除其拥有的所有图形资源。如果上述两个条件均未满足,该项仍属于某个窗口的一部分,此时可使用QQuickWindow::scheduleRenderJob() 使其资源得到清理。 如果实现忽略了对 `QQuickItem::releaseResources()` 的调用,该项在许多情况下将无法再访问 `QQuickWindow `,从而无法安排清理。
在使用QQuickWindow::scheduleRenderJob() 调度图形资源清理时,应使用QQuickWindow::BeforeSynchronizingStage 或QQuickWindow::AfterSynchronizingStage 。同步阶段是场景图因 QML 树的变化而发生改变的时刻。若在其他任何时间点调度清理,可能会导致场景图的其他部分仍引用已被删除的对象,因为这些部分尚未更新。
注意: 强烈建议不要使用 QObject::deleteLater() 来清理图形资源,因为这会导致delete 操作在任意时间运行,且无法确定在删除发生时是否存在已绑定的 OpenGL 上下文。
自定义 QPainter 项
QQuickItem 提供了一个子类QQuickPaintedItem ,它允许用户使用QPainter 来渲染内容。
警告:使用 QQuickPaintedItem 会通过间接的 2D 表面并采用软件光栅化来渲染内容,因此渲染过程需要分两步进行:首先对表面进行光栅化,然后绘制该表面。直接使用场景图 API 通常会快得多。
行为动画
如果您的 Item 使用Behavior 类型来定义属性变化的动画,那么当您需要从 C++ 修改这些属性时,应始终使用QObject::setProperty()、QQmlProperty() 或QMetaProperty::write()。这可确保 QML 引擎能够感知到属性变化。 否则,引擎将无法执行您请求的动画。请注意,这些函数会带来轻微的性能开销。有关更多详细信息,请参阅《从 C++ 访问 QML 对象类型的成员》。
另请参阅 QQuickWindow 和QQuickPaintedItem 。
成员类型文档
enum QQuickItem::Flag
flags QQuickItem::Flags
此枚举类型用于指定各种项的属性。
| 常量 | 值 | 描述 |
|---|---|---|
QQuickItem::ItemClipsChildrenToShape | 0x01 | 表示该项应在视觉上裁剪其子项,使其仅在此项的边界内渲染。 |
QQuickItem::ItemAcceptsInputMethod | 0x02 | 表示该项支持文本输入方法。 |
QQuickItem::ItemIsFocusScope | 0x04 | 表示该项是一个焦点范围。有关详细信息,请参阅 Qt Quick 中的“键盘焦点”。 |
QQuickItem::ItemHasContents | 0x08 | 表示该项具有视觉内容,应由场景图进行渲染。 |
QQuickItem::ItemAcceptsDrops | 0x10 | 表示该项接受拖放事件。 |
QQuickItem::ItemIsViewport | 0x20 | 表示该项为其子项定义了一个视口。 |
QQuickItem::ItemObservesViewport | 0x40 | 表示当任何祖先节点的 ItemIsViewport 标志被设置时,该项希望获知视口边界。 |
Flags 类型是QFlags<Flag> 的 typedef 定义。它存储 Flag 值的按“或”运算组合。
另请参阅 setFlag()、setFlags() 和flags()。
enum QQuickItem::ItemChange
与QQuickItem::itemChange() 配合使用,用于向该项目通知某些类型的变更。
| 常量 | 值 | 描述 |
|---|---|---|
QQuickItem::ItemChildAddedChange | 0 | 添加了一个子项。ItemChangeData::item 包含该添加的子项。 |
QQuickItem::ItemChildRemovedChange | 1 | 已删除一个子项。ItemChangeData::item 包含被删除的子项。 |
QQuickItem::ItemSceneChange | 2 | 该项目已添加到场景中或从场景中移除。渲染该场景的QQuickWindow 通过ItemChangeData::window 指定。当项目从场景中移除时,window参数为null。 |
QQuickItem::ItemVisibleHasChanged | 3 | 该项的可见性已发生变化。ItemChangeData::boolValue 包含新的可见性。 |
QQuickItem::ItemParentHasChanged | 4 | 该项的父项已发生变化。ItemChangeData::item 包含新的父项。 |
QQuickItem::ItemOpacityHasChanged | 5 | 该项的不透明度已发生变化。ItemChangeData::realValue 包含新的不透明度值。 |
QQuickItem::ItemActiveFocusHasChanged | 6 | 项的焦点状态已发生变化。ItemChangeData::boolValue 包含该项是否处于焦点状态的信息。 |
QQuickItem::ItemRotationHasChanged | 7 | 该项的旋转角度已发生变化。ItemChangeData::realValue 包含新的旋转角度。 |
QQuickItem::ItemDevicePixelRatioHasChanged | 9 | 项目所在屏幕的设备像素比已发生变化。ItemChangedData::realValue 包含新的设备像素比。 |
QQuickItem::ItemAntialiasingHasChanged | 8 | 抗锯齿设置已发生变化。当前(布尔型)值可在QQuickItem::antialiasing 中查阅。 |
QQuickItem::ItemEnabledHasChanged | 10 | 项的启用状态已发生变化。ItemChangeData::boolValue 包含新的启用状态。(自 Qt 5.10 起) |
QQuickItem::ItemScaleHasChanged | 11 | 项的缩放比例已发生变化。ItemChangeData::realValue 包含该缩放比例。(自 Qt 6.9 起) |
QQuickItem::ItemTransformHasChanged | 12 | 项的变换已发生变化。当项的位置、大小、旋转、缩放、transformOrigin 或附加变换发生变化时,会触发此事件。ItemChangeData::item 包含引发此变化的项。(自 Qt 6.9 起) |
[since 6.12] enum QQuickItem::MutabilityGroup
此枚举提供了可用于mutabilityGroup 属性的预定义值。
| 常量 | 值 | 描述 |
|---|---|---|
QQuickItem::AutoMutabilityGroup | 0x0 | 默认的可变性组。 |
QQuickItem::StaticMutabilityGroup | 0x1 | 表示该项目很少或从不更新。 |
QQuickItem::ModerateMutabilityGroup | 0x8 | 表示该项更新频率中等。 |
QQuickItem::DynamicMutabilityGroup | 0xf | 表示该项经常更新/每帧更新一次。 |
该枚举类型在 Qt 6.12 中引入。
enum QQuickItem::TransformOrigin
控制缩放等简单变换所作用的中心点。
| 常量 | 值 | 描述 |
|---|---|---|
QQuickItem::TopLeft | 0 | 项目的左上角。 |
QQuickItem::Top | 1 | 项目的顶部中心点。 |
QQuickItem::TopRight | 2 | 项目的右上角。 |
QQuickItem::Left | 3 | 垂直中线的最左端点。 |
QQuickItem::Center | 4 | 项目的中心。 |
QQuickItem::Right | 5 | 垂直中线的最右端点。 |
QQuickItem::BottomLeft | 6 | 项目的左下角。 |
QQuickItem::Bottom | 7 | 项目底部的中心点。 |
QQuickItem::BottomRight | 8 | 元素的右下角。 |
另请参阅 transformOrigin() 和setTransformOrigin()。
属性文档
[read-only] activeFocus : bool
此只读属性指示该项是否处于活动焦点状态。
如果 activeFocus 为 true,则表示该项要么是当前接收键盘输入的项,要么是当前接收键盘输入的项的FocusScope 父项。
通常,通过为项目及其包含的FocusScope 对象设置focus 来获得activeFocus。在下面的示例中,input 和focusScope 对象将具有活动焦点,而根矩形对象则不会。
import QtQuick 2.0
Rectangle {
width: 100; height: 100
FocusScope {
focus: true
TextInput {
id: input
focus: true
}
}
}访问函数:
| bool | hasActiveFocus() const |
另请参阅《 Qt Quick 》中的focus 和Keyboard Focus。
activeFocusOnTab : bool
该属性用于控制该项目是否希望参与标签页焦点链。默认情况下,该属性设置为false 。
注意: tabFocusBehavior 可以进一步将焦点限制在特定类型的控件上,例如仅限文本控件或列表控件。在 macOS 系统中即为这种情况,根据系统设置,特定控件的焦点可能受到限制。
访问函数:
| bool | activeFocusOnTab() const |
| void | setActiveFocusOnTab(bool) |
另请参阅 QStyleHints::tabFocusBehavior 和focusPolicy 。
antialiasing : bool
指定该项目是否启用抗锯齿
视觉元素使用此属性来决定该项目是否应使用抗锯齿。在某些情况下,启用抗锯齿的项目会占用更多内存,且渲染速度可能较慢(更多详情请参阅“抗锯齿”)。
默认值为 false,但可由派生元素覆盖。
访问函数:
| bool | antialiasing() const |
| void | setAntialiasing(bool) |
| void | resetAntialiasing() |
baselineOffset : qreal
指定项目基线在本地坐标系中的位置。
Text 项目的基线是文本所在的假想直线。包含文本的控件通常将其基线设置为文本的基线。
对于非文本项目,将使用默认的基线偏移量 0。
访问函数:
| qreal | baselineOffset() const |
| void | setBaselineOffset(qreal) |
[read-only] childrenRect : QRectF
该属性存储了该项子项的集合位置和大小。
若需访问项目子节点的集合几何信息以正确调整项目大小,此属性将非常有用。
返回的几何信息仅针对该项本身。例如:
Item {
x: 50
y: 100
// prints: QRectF(-10, -20, 30, 40)
Component.onCompleted: print(childrenRect)
Item {
x: -10
y: -20
width: 30
height: 40
}
}访问函数:
| QRectF | childrenRect() |
clip : bool
该属性控制是否启用裁剪。裁剪的默认值为false 。
如果启用了裁剪,则该项会将其自身的绘制内容及其子项的绘制内容裁剪至其边界矩形内。若在项的绘制操作期间设置了裁剪,请务必记得将其重置,以免裁剪场景中的其余部分。
注意:裁剪 可能会影响渲染性能。有关更多信息,请参阅“裁剪”。
注意:出于 QML 的考虑,将 clip 设置为true 也会同时设置ItemIsViewport 标志,这有时可作为一种优化:具有ItemObservesViewport 标志的子项可以省略创建超出视口范围的场景图节点。但ItemIsViewport 标志也可以独立设置。
访问函数:
| bool | clip() const |
| void | setClip(bool) |
containmentMask : QObject*
该属性保存一个可选的掩码,用于在contains()方法中,主要用于对每个QPointerEvent 进行碰撞检测。
QObject 默认情况下,contains() 方法会针对 Item 边界框内的任意点返回true 。但任何QQuickItem ,或任何实现了形式为
Q_INVOKABLE bool contains(const QPointF &point) const;的函数,均可作为掩码使用,将击中检测委托给该对象。
注意: 在事件传递过程中, contains() 会被频繁调用。将命中检测委托给另一个对象会使其速度略有下降。如果该对象的contains() 方法效率低下,containmentMask() 可能会导致性能问题。如果您实现了自定义的QQuickItem 子类,也可以选择重写contains()。
访问函数:
| QObject * | containmentMask() const |
| void | setContainmentMask(QObject *mask) |
通知器信号:
| void | containmentMaskChanged() |
另请参阅 contains()。
enabled : bool
该属性控制该项目是否接收鼠标和键盘事件。默认值为 true。
设置此属性会直接影响子项的“enabled ”值。当设置为“false ”时,所有子项的“enabled ”值也会变为“false ”。当设置为“true ”时,子项的“enabled ”值将恢复为“true ”,除非它们已被显式设置为“false ”。
将此属性设置为false 会自动导致activeFocus 被设置为false ,且该项目将不再接收键盘事件。
注意:悬停 事件由 `setAcceptHoverEvents()` 单独启用。因此,即使该属性设置为 `false`,禁用后的控件仍可继续接收悬停事件。这使得即使交互式控件处于禁用状态,也能显示信息反馈(例如 `ToolTip`)。对于作为该控件子元素添加的任何 `HoverHandlers `,情况也是如此。 不过,HoverHandler 可以被显式地disabled ,或者例如绑定到该元素的enabled 状态。
访问函数:
| bool | isEnabled() const |
| void | setEnabled(bool) |
另请参阅 visible 。
focus : bool
该属性控制该项目在包含它的FocusScope 内是否拥有焦点。如果为true,当包含它的FocusScope 获得活动焦点时,该项目也将获得活动焦点。
在下面的示例中,当scope 获得活动焦点时,input 将获得活动焦点:
import QtQuick 2.0
Rectangle {
width: 100; height: 100
FocusScope {
id: scope
TextInput {
id: input
focus: true
}
}
}就该属性而言,整个场景被视为一个焦点范围。从实际应用来看,这意味着以下 QML 代码将在启动时将活动焦点赋予 `input `。
访问函数:
| bool | hasFocus() const |
| void | setFocus(bool) |
| void | setFocus(bool focus, Qt::FocusReason reason) |
另请参阅 activeFocus 以及 Qt Quick 中的“键盘焦点”。
[since 6.7] focusPolicy : Qt::FocusPolicy
该属性决定了该项接受焦点的模式。
该枚举在 Qt 6.7 中引入。
访问函数:
| Qt::FocusPolicy | focusPolicy() const |
| void | setFocusPolicy(Qt::FocusPolicy policy) |
[bindable] height : qreal
注意:此 属性支持QProperty 绑定。
该属性存储此项的高度。
访问函数:
| qreal | height() const |
| void | setHeight(qreal) |
| void | resetHeight() |
定义项的首选宽度或高度。
如果未指定 `width ` 或 `height `,则项的有效大小将由其 `implicitWidth ` 或 `implicitHeight` 决定。
但是,如果某个项是布局的子项,则布局将使用其隐式尺寸来确定该项的首选尺寸。在这种情况下,显式的width 或height 将被忽略。
大多数项的默认隐式大小为 0x0,但某些项具有固有的隐式大小,无法被覆盖,例如Image 和Text 。
设置隐式大小对于定义基于内容具有首选大小的组件非常有用,例如:
// Label.qml
import QtQuick 2.0
Item {
property alias icon: image.source
property alias label: text.text
implicitWidth: text.implicitWidth + image.implicitWidth
implicitHeight: Math.max(text.implicitHeight, image.implicitHeight)
Image { id: image }
Text {
id: text
wrapMode: Text.Wrap
anchors.left: image.right; anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
}
}注意:使用 implicitWidth 、Text 或TextEdit 并显式设置宽度会导致性能开销,因为文本必须进行两次排版。
[since 6.12] mutabilityGroup : int
向渲染器提示项的更新频率
这是一个高级属性,可用于低级优化。它向渲染器提供关于项目更新频率的提示。在典型用例中,将此属性保留为默认值(QQuickItem::AutoMutabilityGroup (0 ))即可满足需求。
然而,在某些情况下,性能分析可能会发现Qt Quick 场景图渲染器的默认行为无法优化的瓶颈。 通常,当快速更新的几何体与静态几何体被批量渲染在一起时,就会发生这种情况。为避免此问题,您可以尝试将快速更新的组件分配给QQuickItem::DynamicMutabilityGroup 。来自不同可变性组的几何体不会被批量渲染在一起。
可变性组仅适用于项目本身,不会传播到子项。
有关Qt Quick 场景图渲染器的内部工作原理以及几何体批处理的更多信息,请参阅Qt Quick Scene Graph Default Renderer。
注意: 可变性组的有效数值范围 为 [0 .. 15]。该属性将被限制在此范围内。按惯例,频率应随组值的增大而增加。
该枚举类型于 Qt 6.12 中引入。
访问函数:
| int | mutabilityGroup() const |
| void | setMutabilityGroup(int mutabilityGroup) |
opacity : qreal
该属性用于设置项的不透明度。不透明度以介于 0.0(完全透明)和 1.0(完全不透明)之间的数值表示。默认值为 1.0。
设置此属性时,指定的不透明度也会单独应用于子项。在某些情况下,这可能会产生意想不到的效果。例如在下方的第二组矩形中,红色矩形指定了 0.5 的不透明度,这会影响其蓝色子矩形的不透明度,即使该子矩形未指定不透明度。
超出 0 到 1 范围的值将被限制在该范围内。
| |
|
更改项的不透明度不会影响该项是否接收用户输入事件。(相比之下,将visible 属性设置为false 会阻止鼠标事件;将enabled 属性设置为false 会阻止鼠标和键盘事件,并会移除该项的焦点。)
访问函数:
| qreal | opacity() const |
| void | setOpacity(qreal) |
另请参阅 visible 。
parent : QQuickItem*
该属性存储了该项的视觉父项。
注意: 视觉父项的概念 与QObject 父项的概念 不同。项的视觉父项不一定与其对象父项相同。更多详细信息,请参阅 Qt Quick 中的“概念 - 视觉父项”。
注意: 该属性的通知信号 会在视觉父项销毁时触发。C++ 信号处理程序不能假设视觉父项层次结构中的项仍已完全构造完成。请使用 `qobject_cast ` 来验证父项层次结构中的项是否可安全地作为预期类型使用。
访问函数:
| QQuickItem * | parentItem() const |
| void | setParentItem(QQuickItem *parent) |
rotation : qreal
该属性表示项目围绕其transformOrigin 顺时针旋转的角度(以度为单位)。
默认值为 0 度(即未旋转)。
|
访问函数:
| qreal | rotation() const |
| void | setRotation(qreal) |
scale : qreal
该属性存储了该项目的缩放因子。
缩放因子小于 1.0 时,该项将以较小的尺寸渲染;缩放因子大于 1.0 时,该项将以较大的尺寸渲染。负缩放因子会导致该项在渲染时被镜像。
默认值为 1.0。
缩放从transformOrigin 开始应用。
|
访问函数:
| qreal | scale() const |
| void | setScale(qreal) |
smooth : bool
指定该项目是否进行平滑处理
主要用于基于图像的项目,以决定该项目是否应使用平滑采样。平滑采样采用线性插值,而非平滑采样则采用最近邻插值。
在Qt Quick 2.0中,此属性对性能的影响微乎其微。
默认情况下,此属性设置为true 。
访问函数:
| bool | smooth() const |
| void | setSmooth(bool) |
state : QString
该属性存储了该项当前状态的名称。
如果项目处于默认状态(即未显式设置任何状态),则该属性保存一个空字符串。同样地,您可以通过将该属性设置为空字符串,将项目恢复为默认状态。
访问函数:
| QString | state() const |
| void | setState(const QString &) |
transformOrigin : TransformOrigin
该属性存储了缩放和旋转变换的原点。
共有九个变换原点可供选择,如下图所示。默认的变换原点为Item.Center 。

访问函数:
| QQuickItem::TransformOrigin | transformOrigin() const |
| void | setTransformOrigin(QQuickItem::TransformOrigin) |
visible : bool
该属性用于控制项目是否可见。默认值为 true。
设置此属性会直接影响子项的visible 值。当设置为false 时,所有子项的visible 值也会变为false 。当设置为true 时,子项的visible 值将恢复为true ,除非它们已被显式设置为false 。
(由于这种连锁行为,如果属性绑定仅应响应显式的属性更改,则使用visible 属性可能无法达到预期效果。在这种情况下,最好改用opacity 属性。)
如果将此属性设置为 `false`,该项将不再接收鼠标事件,但会继续接收键盘事件,并且如果已设置键盘 `focus `,则会保留该设置。(相比之下,将 `enabled ` 属性设置为 `false ` 会同时阻止鼠标和键盘事件,并移除该项的焦点。)
注意:该属性的 值仅受此属性本身或父级对象的visible 属性变化的影响。例如,如果该项移出屏幕范围,或者opacity 变为0,该值都不会改变。 但是,出于历史原因,在项目构建完成后,即使该项目尚未被添加到场景中,该属性的值也是 true。读取或修改尚未被添加到场景中的项目的此属性,可能会导致结果与预期不符。
注意: 该属性的通知信号 会在视觉父对象销毁时触发。C++ 信号处理程序不能假设视觉父对象层次结构中的项仍已完全构建完毕。请使用 `qobject_cast ` 来验证父对象层次结构中的项是否可安全地作为预期类型使用。
访问函数:
| bool | isVisible() const |
| void | setVisible(bool) |
[bindable] width : qreal
注意:此 属性支持QProperty 绑定。
该属性存储此项的宽度。
访问函数:
| qreal | width() const |
| void | setWidth(qreal) |
| void | resetWidth() |
[bindable] x : qreal
注意:此 属性支持QProperty 绑定。
定义该项目相对于其父级元素的 x 坐标位置。
访问函数:
| qreal | x() const |
| void | setX(qreal) |
[bindable] y : qreal
注意:此 属性支持QProperty 绑定。
定义项目相对于其父级元素的 y 坐标位置。
访问函数:
| qreal | y() const |
| void | setY(qreal) |
z : qreal
设置同级元素的堆叠顺序。默认堆叠顺序为 0。
堆叠值较高的项目会显示在堆叠顺序较低的同级项目之上。堆叠值相同的项目将按其出现顺序从上到下显示。堆叠值为负的项目将显示在其父级内容下方。
以下示例展示了堆叠顺序产生的各种效果。
| 相同的z ——后添加的子元素位于先添加的子元素上方:
|
| 堆叠顺序z 较高的元素位于顶部:
|
| 相同的z ——子节点位于父节点上方:
|
| z 位于下方:
|
访问函数:
| qreal | z() const |
| void | setZ(qreal) |
成员函数文档
[explicit] QQuickItem::QQuickItem(QQuickItem *parent = nullptr)
根据给定的parent 创建一个QQuickItem。
该parent 将同时用作visual parent 和QObject 的父项。
[override virtual noexcept] QQuickItem::~QQuickItem()
销毁QQuickItem 。
bool QQuickItem::acceptHoverEvents() const
返回此项目是否接受悬停事件。
默认值为 false。
如果该值为 false,则该项将不会通过hoverEnterEvent()、hoverMoveEvent() 和hoverLeaveEvent() 函数接收任何悬停事件。
另请参阅 setAcceptHoverEvents()。
bool QQuickItem::acceptTouchEvents() const
返回此项目是否接受触摸事件。
默认值为false 。
如果该值为false ,则该项将不会通过touchEvent()函数接收任何触摸事件。
另请参阅 setAcceptTouchEvents()。
Qt::MouseButtons QQuickItem::acceptedMouseButtons() const
返回该项支持的鼠标按钮。
默认值为Qt::NoButton ;即不接受任何鼠标按钮。
如果某个项目不接受特定鼠标事件对应的鼠标按钮,则该鼠标事件不会传递给该项目,而是会传递给项目层次结构中的下一个项目。
另请参阅 setAcceptedMouseButtons() 和acceptTouchEvents()。
[virtual] QRectF QQuickItem::boundingRect() const
返回该项在其自身坐标系中的范围:一个从0, 0 到width() 以及height() 的矩形。
[invokable] QQuickItem *QQuickItem::childAt(qreal x, qreal y) const
返回在该项的坐标系内,位于点 (x,y) 处找到的第一个可见子项。
如果不存在此类项,则返回nullptr 。
注意: 可通过元对象系统和 QML 调用此 函数。参见Q_INVOKABLE 。
QList<QQuickItem *> QQuickItem::childItems() const
返回该项的子项。
[virtual protected] bool QQuickItem::childMouseEventFilter(QQuickItem *item, QEvent *event)
重写此方法,以过滤该项的子项收到的指针事件。
仅当 `filtersChildMouseEvents()` 的返回值为 `true` 时,才会调用此方法。
如果指定的event 不应传递给指定的子元素item ,则返回true ;否则返回false 。如果您返回true ,还应通过accept 或ignore 设置event ,以指示事件传播应停止还是继续。不过,该event 将始终发送给父链中所有子级 mouseEventFilter。
注意:尽管 名称如此,该函数在将事件传递给所有子对象(通常是鼠标、触摸和数位板事件)的过程中,会过滤所有QPointerEvent 实例。在子类中重写此函数时,建议仅使用QPointerEvent 中提供的访问器来编写通用的事件处理代码。或者,您可以启用event->type() 和/或event->device()->type() ,以针对不同事件类型采用不同的处理方式。
注意:过滤 只是在手势含义不明确时(例如在按下时,您无法确定用户是点击还是拖动)分配责任的一种方式。 另一种方法是在按下时调用QPointerEvent::addPassiveGrabber(),以便以非独占方式监视QEventPoint 的进度。无论采用哪种情况,进行监视的项目或指针处理程序都可以在稍后——当明确该手势符合其预期模式时——抢占独占控制权。
另请参阅 setFiltersChildMouseEvents()。
[override virtual protected] void QQuickItem::classBegin()
重写了:QQmlParserStatus::classBegin()。
派生类应在向 classBegin 添加自己的操作之前,先调用基类的方法。
[virtual] QRectF QQuickItem::clipRect() const
返回在viewportItem()中当前可见的该项内的矩形区域,前提是存在视口且ItemObservesViewport 标志已设置;否则,返回该项在其自身坐标系中的范围:一个从0, 0 到width()和height()的矩形。 当 `clip ` 为 `true` 时,此区域即为应保持可见的区域。它也可用于 `updatePaintNode()` 中,以限制添加到场景图中的图形。
例如,一个大型绘图或大型文本文档可能会显示在一个仅占据应用程序窗口一部分的 Flickable 中:在这种情况下,Flickable 是视口项,而自定义内容渲染项可以选择省略位于当前可见区域之外的场景图节点。 如果设置了ItemObservesViewport 标志,则每次用户在Flickable中滚动内容时,该区域都会发生变化。
对于嵌套的视口项,clipRect() 是所有设置了 `ItemIsViewport ` 标志的父节点的 `boundingRect` 的交集,并映射到该项的坐标系上。
另请参阅 boundingRect()。
[override virtual protected] void QQuickItem::componentComplete()
重写了:QQmlParserStatus::componentComplete()。
派生类在向 `componentComplete` 添加自己的操作之前,应先调用基类的方法。
[virtual invokable] bool QQuickItem::contains(const QPointF &point) const
如果该项包含位于本坐标系中的point ,则返回true ;否则返回false 。
可以重写此函数,以便处理具有自定义形状的项中的点碰撞。默认实现会检查该点是否位于containmentMask()内部(如果已设置),否则检查是否位于包围盒内部。
注意:该 方法用于在事件传递过程中对每个QEventPoint 进行碰撞检测,因此实现应尽可能轻量级。
注意:该 函数可通过元对象系统及从 QML 调用。参见Q_INVOKABLE 。
QCursor QQuickItem::cursor() const
返回该项目的光标形状。
当鼠标悬停在此项目上时,鼠标指针将呈现此形状,除非设置了覆盖指针。有关各种有用的形状,请参阅list of predefined cursor objects 。
如果未设置光标形状,则返回具有Qt::ArrowCursor 形状的光标;但如果重叠的项目具有有效的光标,则可能会显示另一种光标形状。
另请参阅 setCursor() 和unsetCursor()。
[virtual protected] void QQuickItem::dragEnterEvent(QDragEnterEvent *event)
可以在子类中重写此事件处理程序,以接收某项的drag-enter事件。事件信息由event 参数提供。
只有当该项设置了ItemAcceptsDrops 标志时,才会提供拖放事件。
该事件默认会被接受,因此如果您重写此函数,则无需显式接受该事件。如果您不接受该事件,请调用event->ignore() 。
[virtual protected] void QQuickItem::dragLeaveEvent(QDragLeaveEvent *event)
可以在子类中重写此事件处理程序,以接收某项的拖动离开事件。事件信息由event 参数提供。
只有当该项设置了ItemAcceptsDrops 标志时,才会提供拖放事件。
该事件默认会被接受,因此如果您重写此函数,则无需显式接受该事件。如果您不接受该事件,请调用event->ignore() 。
[virtual protected] void QQuickItem::dragMoveEvent(QDragMoveEvent *event)
可以在子类中重写此事件处理程序,以接收某项的拖动事件。事件信息由event 参数提供。
只有当该项目的ItemAcceptsDrops 标志已设置时,才会提供拖放事件。
该事件默认会被接受,因此如果您重写此函数,则无需显式接受该事件。如果您不接受该事件,请调用event->ignore() 。
[virtual protected] void QQuickItem::dropEvent(QDropEvent *event)
可以在子类中重写此事件处理程序,以接收某项的拖放事件。事件信息由event 参数提供。
只有当该项设置了ItemAcceptsDrops 标志时,才会提供拖放事件。
该事件默认会被接受,因此如果您重写此函数,则无需显式接受该事件。如果您不接受该事件,请调用event->ignore() 。
[invokable, since 6.3] void QQuickItem::dumpItemTree() const
递归地输出以该项为起点的各项(Items)的视觉树的相关细节。
注意: QObject::dumpObjectTree() 会输出类似的树结构;但正如 Qt Quick 中“概念 - 视觉父项”部分所解释的,一个项的QObject::parent() 有时会与其QQuickItem::parentItem() 不同。您可以分别输出这两棵树以查看差异。
注意: 确切的输出格式在 Qt 的未来版本中可能会发生变化。
注意:该 函数可通过元对象系统以及从 QML 中调用。参见Q_INVOKABLE 。
该函数在 Qt 6.3 中引入。
另请参阅 《调试技巧》以及GammaRay 的Qt Quick 检查器。
[invokable, since 6.3] void QQuickItem::ensurePolished()
调用updatePolish()
这对于布局(或定位器)等控件非常有用,它们会延迟计算其implicitWidth 和implicitHeight ,直到接收到PolishEvent事件为止。
通常情况下,例如当子项被添加到或从布局中移除时,隐式大小不会立即被计算(这是为了优化)。 在某些情况下,可能需要在子项添加后立即查询布局的隐式大小。如果是这种情况,请在查询隐式大小之前调用此函数。
注意: 可以通过元对象系统和 QML 调用此 函数。参见Q_INVOKABLE 。
该函数在 Qt 6.3 中引入。
另请参阅 updatePolish() 和polish()。
[override virtual protected] bool QQuickItem::event(QEvent *ev)
重写了:QObject::event(QEvent *e)。
bool QQuickItem::filtersChildMouseEvents() const
返回指示是否应通过该项目过滤针对其子项的指针事件。
如果该项及其子项均已调用 `acceptTouchEvents()`true ,则当发生触摸交互时,该项将过滤该触摸事件。但如果该项或其子项中任一方无法处理触摸事件,则会调用 `childMouseEventFilter()` 并传入一个合成鼠标事件。
另请参阅 setFiltersChildMouseEvents() 和childMouseEventFilter()。
QQuickItem::Flags QQuickItem::flags() const
返回该项目的标志。
[virtual protected] void QQuickItem::focusInEvent(QFocusEvent *event)
可以在子类中重写此事件处理程序,以接收某项的焦点获得事件。事件信息由event 参数提供。
该事件默认会被接受,因此如果您重写此函数,则无需显式接受该事件。如果您不接受该事件,请调用event->ignore() 。
如果您确实重写了此函数,则应调用基类的实现。
[virtual protected] void QQuickItem::focusOutEvent(QFocusEvent *event)
可以在子类中重新实现此事件处理程序,以接收某项的焦点移出事件。事件信息由event 参数提供。
该事件默认会被接受,因此如果您重写此函数,则无需显式接受该事件。如果您不接受该事件,请调用event->ignore() 。
[invokable] void QQuickItem::forceActiveFocus()
将焦点强制移至该项。
此方法将焦点设置在该项上,并确保对象层次结构中所有祖先FocusScope 对象也获得focus 。
焦点变化的原因将设置为Qt::OtherFocusReason 。请使用重载的方法指定焦点原因,以便更好地处理焦点变化。
注意:此 函数可通过元对象系统和 QML 调用。参见Q_INVOKABLE 。
另请参阅 activeFocus 。
[invokable] void QQuickItem::forceActiveFocus(Qt::FocusReason reason)
将焦点主动移至具有给定reason 的项上。
此方法将焦点设置在该项上,并确保对象层次结构中所有祖先FocusScope 对象也获得focus 属性。
注意:此 函数可通过元对象系统和 QML 调用。参见Q_INVOKABLE 。
这是一个重载函数。
另请参阅 activeFocus 和Qt::FocusReason 。
[virtual protected, since 6.0] void QQuickItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)
调用此函数是为了处理该项的几何形状变化,即从 `oldGeometry ` 变为 `newGeometry`。如果这两个几何形状相同,则不执行任何操作。
派生类必须在其实现中调用基类的方法。
该函数于 Qt 6.0 中引入。
QSharedPointer<QQuickItemGrabResult> QQuickItem::grabToImage(const QSize &targetSize = QSize())
将该项目抓取到内存图像中。
抓取操作以异步方式进行,当抓取完成后,将触发QQuickItemGrabResult::ready()信号。
使用targetSize 指定目标图像的大小。默认情况下,结果图像的大小与 item 相同。
如果无法启动抓取,该函数将返回null 。
注意:此 函数会将项目渲染到一个离屏表面,并将该表面从 GPU 内存复制到 CPU 内存中,这可能会消耗大量资源。如需“实时”预览,请使用layers 或ShaderEffectSource 。
另请参阅 QQuickWindow::grabWindow()。
[protected] bool QQuickItem::heightValid() const
返回“height”属性是否已被显式设置。
[virtual protected] void QQuickItem::hoverEnterEvent(QHoverEvent *event)
可以在子类中重写此事件处理程序,以接收某项的悬停进入事件。事件信息由event 参数提供。
只有当acceptHoverEvents() 为 true 时,才会提供悬停事件。
该事件默认会被接受,因此如果您重写此函数,则无需显式接受该事件。如果您不接受该事件,请调用event->ignore() 。
[virtual protected] void QQuickItem::hoverLeaveEvent(QHoverEvent *event)
可以在子类中重新实现此事件处理程序,以接收项目的悬停离开事件。事件信息由event 参数提供。
只有当acceptHoverEvents() 的值为 true 时,才会提供悬停事件。
该事件默认会被接受,因此如果您重写此函数,则无需显式接受该事件。如果您不接受该事件,请调用event->ignore() 。
[virtual protected] void QQuickItem::hoverMoveEvent(QHoverEvent *event)
可以在子类中重写此事件处理程序,以接收项目的悬停移动事件。事件信息由event 参数提供。
只有当acceptHoverEvents() 的值为 true 时,才会提供悬停事件。
该事件默认会被接受,因此如果您重写此函数,则无需显式地接受该事件。如果您不接受该事件,请调用event->ignore() 。
qreal QQuickItem::implicitWidth() const
返回由其他确定内容的属性所隐含的项的宽度。
注意: 这是 implicitWidth 属性的获取 函数。
另请参阅 ` setImplicitWidth()`。
[virtual protected] void QQuickItem::inputMethodEvent(QInputMethodEvent *event)
可以在子类中重写此事件处理程序,以接收某项的输入法事件。事件信息由event 参数提供。
该事件默认会被接受,因此如果您重写此函数,则无需显式接受该事件。如果您不接受该事件,请调用event->ignore() 。
[virtual] QVariant QQuickItem::inputMethodQuery(Qt::InputMethodQuery query) const
此方法仅适用于输入项。
如果该项是输入项,则应重写此方法,以返回给定query 的相关输入法标志。
另请参阅 QWidget::inputMethodQuery()。
bool QQuickItem::isAncestorOf(const QQuickItem *child) const
如果该项是child 的祖先(即,如果该项是child 的父项,或者属于child 的父项的祖先之一),则返回true 。
另请参阅 parentItem()。
[protected] bool QQuickItem::isComponentComplete() const
如果 QML 组件的构建已完成,则返回 true;否则返回 false。
通常希望将某些处理推迟到组件加载完成后再进行。
另请参阅 componentComplete()。
bool QQuickItem::isFocusScope() const
如果该项目是聚焦范围,则返回 true;否则返回 false。
[virtual] bool QQuickItem::isTextureProvider() const
如果该项是纹理提供者,则返回 true。默认实现返回 false。
该函数可从任何线程调用。
[virtual protected] void QQuickItem::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value)
当此项发生change 时调用。
value 在适用时,该方法包含与该变更相关的额外信息。
如果您在子类中重写此方法,请务必在
QQuickItem::itemChange(change, value);,以确保会发出windowChanged()信号。
bool QQuickItem::keepMouseGrab() const
返回鼠标输入是否应仅限于此项。
另请参阅 setKeepMouseGrab()、QEvent::accept() 和QEvent::ignore()。
bool QQuickItem::keepTouchGrab() const
返回该项抓取的触点是否应专属地保留在此项上。
另请参阅 setKeepTouchGrab()、keepMouseGrab()、QEvent::accept() 以及QEvent::ignore()。
[virtual protected] void QQuickItem::keyPressEvent(QKeyEvent *event)
可以在子类中重写此事件处理程序,以接收某项的按键事件。事件信息由event 参数提供。
该事件默认会被接受,因此如果您重写此函数,则无需显式接受该事件。如果您不接受该事件,请调用event->ignore() 。
[virtual protected] void QQuickItem::keyReleaseEvent(QKeyEvent *event)
可以在子类中重写此事件处理程序,以接收某项的键释放事件。事件信息由event 参数提供。
该事件默认会被接受,因此若重写此函数,则无需显式接受该事件。若不接受该事件,请调用event->ignore() 。
[invokable] QPointF QQuickItem::mapFromGlobal(const QPointF &point) const
将全局屏幕坐标系中给定的point 映射到该项坐标系中的等效点,并返回映射后的坐标。
映射过程中会使用该项的以下属性:x 、y 、scale 、rotation 、transformOrigin 以及transform 。
如果这些元素属于不同的场景,则映射中会包含两个场景之间的相对位置。
例如,这对于向Qt Quick 组件添加弹出窗口可能会有所帮助。
注意:窗口 定位由窗口管理器完成,此值仅作为参考。因此,最终的窗口位置可能与预期不同。
注意:如果 该项位于子场景中(例如映射到 3DModel 对象上),则 UV 映射会纳入此变换中,因此只要point 确实位于该项的边界内,它就会真正从屏幕坐标转换为该项的坐标。其他映射函数目前尚不支持这种方式。
注意:该 函数可通过元对象系统和 QML 调用。参见Q_INVOKABLE 。
另请参阅 Qt Quick 中的“概念 - 视觉坐标”。
[invokable] QPointF QQuickItem::mapFromItem(const QQuickItem *item, const QPointF &point) const
将item 中给定的point 映射到该项坐标系中的等效点,并返回映射后的坐标。
映射过程中会使用该对象的以下属性:x 、y 、scale 、rotation 、transformOrigin 以及transform 。
如果这些项目属于不同的场景,则映射关系中包含这两个场景的相对位置。
如果 `item ` 的值为 `nullptr`,则该映射会根据场景的坐标系对 `point ` 进行映射。
注意: 可通过元对象系统和 QML 调用此 函数。参见Q_INVOKABLE 。
另请参阅 《Qt Quick 》中的“概念 - 视觉坐标”。
QPointF QQuickItem::mapFromScene(const QPointF &point) const
将场景坐标系中给定的point 映射到该项坐标系中的等效点,并返回映射后的坐标。
映射过程中会使用该项的以下属性:x 、y 、scale 、rotation 、transformOrigin 以及transform 。
如果这些项目属于不同的场景,则映射信息中包含两个场景的相对位置。
另请参阅 Qt Quick 中的“概念 - 视觉坐标”。
QRectF QQuickItem::mapRectFromItem(const QQuickItem *item, const QRectF &rect) const
将item 中给定的rect 映射到该项坐标系内的等效矩形区域,并返回映射后的矩形值。
映射过程中会使用该项的以下属性:x 、y 、scale 、rotation 、transformOrigin 以及transform 。
如果这些项目属于不同的场景,则映射信息中包含两个场景之间的相对位置。
如果item 为nullptr ,则该映射将rect 从场景的坐标系中映射出来。
另请参阅 《Qt Quick 》中的“概念 - 视觉坐标”。
QRectF QQuickItem::mapRectFromScene(const QRectF &rect) const
将场景坐标系中给定的rect 映射到该项坐标系内的等效矩形区域,并返回映射后的矩形值。
映射过程中会使用该项的以下属性:x 、y 、scale 、rotation 、transformOrigin 以及transform 。
如果这些项目属于不同的场景,则映射中包含两个场景之间的相对位置。
另请参阅 Qt Quick 中的“概念 - 视觉坐标”。
QRectF QQuickItem::mapRectToItem(const QQuickItem *item, const QRectF &rect) const
将该项坐标系中的给定rect 映射到item 坐标系中的等效矩形区域,并返回映射后的矩形值。
映射过程中会使用该项的以下属性:x 、y 、scale 、rotation 、transformOrigin 以及transform 。
如果这些项目属于不同的场景,则映射结果将包含两个场景之间的相对位置。
如果item 的值为nullptr ,则会将rect 映射到该场景的坐标系中。
另请参阅 《Qt Quick 》中的“概念——视觉坐标”。
QRectF QQuickItem::mapRectToScene(const QRectF &rect) const
将该项坐标系中给定的rect 映射到场景坐标系中的等效矩形区域,并返回映射后的矩形值。
映射过程中会使用该项的以下属性:x 、y 、scale 、rotation 、transformOrigin 以及transform 。
如果这些项目属于不同的场景,则映射信息中包含两个场景之间的相对位置。
另请参阅 Qt Quick 中的“概念 - 视觉坐标”。
[invokable] QPointF QQuickItem::mapToGlobal(const QPointF &point) const
将该项坐标系中的给定point 映射到全局屏幕坐标系中的等效点,并返回映射后的坐标。
映射过程中会使用该项的以下属性:x 、y 、scale 、rotation 、transformOrigin 以及transform 。
如果这些元素属于不同的场景,则映射信息中包含两个场景之间的相对位置。
例如,这对于向Qt Quick 组件添加弹出窗口可能会很有帮助。
注意:窗口 定位由窗口管理器负责,此值仅作为参考。因此,最终的窗口位置可能与预期不符。
注意:此 函数可通过元对象系统和 QML 调用。参见Q_INVOKABLE 。
另请参阅 《Qt Quick 》中的“概念 - 视觉坐标”。
[invokable] QPointF QQuickItem::mapToItem(const QQuickItem *item, const QPointF &point) const
将该项坐标系中给定的坐标point 映射到item 坐标系中的等效点,并返回映射后的坐标。
映射过程中会使用该项的以下属性:x 、y 、scale 、rotation 、transformOrigin 以及transform 。
如果这些项目属于不同的场景,则映射信息中会包含两个场景之间的相对位置。
如果 `item ` 的值为 `nullptr`,则会将 `point ` 映射到该场景的坐标系中。
注意: 可通过元对象系统和 QML 调用此 函数。参见Q_INVOKABLE 。
另请参阅 《Qt Quick 》中的“概念 - 视觉坐标”。
QPointF QQuickItem::mapToScene(const QPointF &point) const
将该项坐标系中的给定point 映射到场景坐标系中的等效点,并返回映射后的坐标。
映射过程中会使用该项的以下属性:x 、y 、scale 、rotation 、transformOrigin 以及transform 。
如果这些项目属于不同的场景,则映射将包含两个场景之间的相对位置。
另请参阅 Qt Quick 中的“概念 - 视觉坐标”。
[virtual protected] void QQuickItem::mouseDoubleClickEvent(QMouseEvent *event)
可以在子类中重写此事件处理程序,以接收某项的鼠标双击事件。事件信息由event 参数提供。
该事件默认会被接受,因此若重写此函数,则无需显式接受该事件。若不接受该事件,请调用event->ignore() 。
[virtual protected] void QQuickItem::mouseMoveEvent(QMouseEvent *event)
可以在子类中重写此事件处理程序,以接收某项的鼠标移动事件。事件信息由event 参数提供。
为了接收鼠标移动事件,必须先接受前一个鼠标按下事件(例如通过重写mousePressEvent() 函数),并且acceptedMouseButtons() 函数必须返回相应的鼠标按钮。
该事件默认被接受,因此如果您重写此函数,则无需显式接受该事件。如果您不接受该事件,请调用event->ignore() 。
[virtual protected] void QQuickItem::mousePressEvent(QMouseEvent *event)
可以在子类中重写此事件处理程序,以接收某项的鼠标点击事件。事件信息由event 参数提供。
为了接收鼠标按下事件,acceptedMouseButtons() 必须返回相应的鼠标按钮。
该事件默认会被接受,因此如果您重写此函数,则无需显式接受该事件。如果您不接受该事件,请调用event->ignore() 。
[virtual protected] void QQuickItem::mouseReleaseEvent(QMouseEvent *event)
可以在子类中重写此事件处理程序,以接收某项的鼠标释放事件。事件信息由event 参数提供。
为了接收鼠标释放事件,必须先接受先前的鼠标按下事件(例如通过重写mousePressEvent() 函数),并且acceptedMouseButtons() 函数必须返回相应的鼠标按钮。
该事件默认会被接受,因此若重写此函数,则无需显式接受该事件。若不接受该事件,请调用event->ignore() 。
[virtual protected] void QQuickItem::mouseUngrabEvent()
可以在子类中重新实现此事件处理程序,以便在该项目上发生鼠标释放事件时收到通知。
[invokable] QQuickItem *QQuickItem::nextItemInFocusChain(bool forward = true)
返回焦点链中紧邻该项的项。如果forward 的值为true ,或者未提供该参数,则返回向前方向上的下一个项;如果forward 的值为false ,则返回向后方向上的下一个项。
注意: 可通过元对象系统和 QML 调用此 函数。参见Q_INVOKABLE 。
void QQuickItem::polish()
为该项目安排一场波兰活动。
当场景图处理该请求时,它将调用该项上的updatePolish() 方法。
另请参阅 updatePolish()、QQuickTest::qIsPolishScheduled() 和ensurePolished()。
[virtual protected] void QQuickItem::releaseResources()
当某个项需要释放尚未由QQuickItem::updatePaintNode() 返回的节点所管理的图形资源时,会调用此函数。
这种情况发生在项目即将从其先前进行渲染的窗口中移除时。当调用该函数时,可以保证该项目拥有一个 `window `。
该函数在 GUI 线程上被调用,而渲染线程(若已使用)的状态则未知。不应直接删除对象,而应通过QQuickWindow::scheduleRenderJob() 将其排入清理队列。
另请参阅 Graphics Resource Handling 。
QQuickItem *QQuickItem::scopedFocusItem() const
如果该项是焦点范围,则返回其焦点链中当前拥有焦点的项。
如果该项不是焦点范围,则返回nullptr 。
void QQuickItem::setAcceptHoverEvents(bool enabled)
如果enabled 为 true,则该项将接受悬停事件;否则,该项不接受悬停事件。
另请参阅 acceptHoverEvents()。
void QQuickItem::setAcceptTouchEvents(bool enabled)
如果enabled 为真,则将该项设置为接受触摸事件;否则,该项不接受触摸事件。
另请参阅 acceptTouchEvents()。
void QQuickItem::setAcceptedMouseButtons(Qt::MouseButtons buttons)
将该项接受的鼠标按钮设置为buttons 。
注意:在 Qt 5 中,调用 setAcceptedMouseButtons() 会隐式导致项目同时接收触摸事件和鼠标事件;但建议调用setAcceptTouchEvents() 来订阅这些事件。在 Qt 6 中,必须调用setAcceptTouchEvents() 才能继续接收这些事件。
另请参阅 acceptedMouseButtons()。
void QQuickItem::setCursor(const QCursor &cursor)
为该项目设置cursor 形状。
另请参阅 cursor() 和unsetCursor()。
void QQuickItem::setFiltersChildMouseEvents(bool filter)
设置是否应通过该项过滤针对其子项的指针事件。
如果 `filter ` 为 `true`,则当子项触发指针事件时,将调用 `childMouseEventFilter()`。
另请参阅 filtersChildMouseEvents()。
void QQuickItem::setFlag(QQuickItem::Flag flag, bool enabled = true)
如果enabled 为true,则为该项目启用指定的flag ;如果enabled 为false,则该标志被禁用。
这些标志为该项目提供了各种提示;例如,ItemClipsChildrenToShape 标志表示该项目的所有子项都应被裁剪以适应项目区域。
void QQuickItem::setFlags(QQuickItem::Flags flags)
为该项目启用指定的flags 。
void QQuickItem::setFocusPolicy(Qt::FocusPolicy policy)
将此项的焦点策略设置为policy 。
注意: 这是属性focusPolicy 的设置 函数。
另请参阅 focusPolicy()。
void QQuickItem::setKeepMouseGrab(bool keep)
设置鼠标输入是否应仅保留在此项目上。
此功能对于希望在执行预定义手势后捕获并保留鼠标交互的项目非常有用。例如,一个关注鼠标水平移动的项目,一旦超过阈值,即可将keepMouseGrab 设置为true。一旦keepMouseGrab 被设置为true,过滤项将不再响应鼠标事件。
如果 `keep ` 为 `false`,过滤项可能会抢占鼠标控制权。例如,当 `Flickable ` 检测到用户开始移动视口时,可能会尝试抢占鼠标控制权。
另请参阅 keepMouseGrab()。
void QQuickItem::setKeepTouchGrab(bool keep)
用于设置该控件抓取的触点是否应专属地保留给该控件。
此功能适用于希望在执行预定义手势后抓取并保留特定触点的位置。例如,若某个位置希望获取水平方向的触点移动,可在触点位置超过阈值后将 setKeepTouchGrab 设置为 true。一旦 setKeepTouchGrab 被设置为 true,过滤位置将不再对相关触点作出反应。
如果 `keep ` 为 false,过滤项可能会“抢占”该抓取操作。例如,当 `Flickable ` 检测到用户开始移动视口时,可能会尝试抢占该触点抓取操作。
另请参阅 keepTouchGrab() 和setKeepMouseGrab()。
void QQuickItem::setSize(const QSizeF &size)
将项的大小设置为size 。此方法会保留宽度和高度上现有的绑定;因此,任何触发绑定再次执行的更改都会覆盖所设的值。
另请参阅 size 、setWidth 和setHeight 。
QSizeF QQuickItem::size() const
返回该项的大小。
void QQuickItem::stackAfter(const QQuickItem *sibling)
将该项目移动到子项列表中指定同级项目之后的索引位置。子项的顺序既影响视觉堆叠顺序,也影响Tab键焦点导航顺序。
假设这两个项目的 z 值相同,这将导致sibling 被渲染在该项目下方。
如果两个项目的activeFocusOnTab 均设置为true ,这也会导致Tab键焦点顺序发生变化,此时sibling 将比该项目更早获得焦点。
指定的sibling 必须是该元素的同级元素;也就是说,它们必须具有相同的直接parent 。
另请参阅 “概念 - 视觉父元素”中的Qt Quick 。
void QQuickItem::stackBefore(const QQuickItem *sibling)
将该项目移动到子项列表中指定同级项目之前的索引位置。子项的顺序既影响视觉堆叠顺序,也影响Tab键焦点导航顺序。
假设这两个项目的 z 值相同,这将导致 `sibling ` 渲染在该项目之上。
如果两个项目的activeFocusOnTab 属性均设置为true ,这也会导致Tab键焦点顺序发生变化,此时sibling 将在本项目之后获得焦点。
指定的sibling 必须是该项的同级元素;也就是说,它们必须具有相同的直接父元素(parent )。
另请参阅 “概念 - 视觉父元素”中的Qt Quick 。
[virtual] QSGTextureProvider *QQuickItem::textureProvider() const
返回某项的纹理提供程序。默认实现返回nullptr 。
此函数只能在渲染线程上调用。
[virtual protected] void QQuickItem::touchEvent(QTouchEvent *event)
可以在子类中重写此事件处理程序,以接收某项的触摸事件。事件信息由event 参数提供。
该事件默认会被接受,因此若重写此函数,则无需显式接受该事件。若不接受该事件,请调用event->ignore() 。
[virtual protected] void QQuickItem::touchUngrabEvent()
可以在子类中重新实现此事件处理程序,以便在该项目上发生“触摸释放”事件时收到通知。
void QQuickItem::unsetCursor()
清除该项目的光标形状。
[slot] void QQuickItem::update()
为该项目安排一次对updatePaintNode() 的调用。
如果该项正在QQuickWindow 中显示,则一定会调用QQuickItem::updatePaintNode()。
只有指定了QQuickItem::ItemHasContents 的项目才允许调用QQuickItem::update()。
[protected] void QQuickItem::updateInputMethod(Qt::InputMethodQueries queries = Qt::ImQueryInput)
如有必要,请在查询值更新后通知输入法。queries 指明了发生变化的属性。
[virtual protected] QSGNode *QQuickItem::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *updatePaintNodeData)
当需要将项的状态与场景图同步时,该函数会在渲染线程中被调用。
如果用户在该项上设置了QQuickItem::ItemHasContents 标志,则该函数会作为QQuickItem::update()的返回结果被调用。
该函数应返回该项场景图子树的根节点。大多数实现会返回一个QSGGeometryNode ,其中包含该项的视觉表示。oldNode 是上次调用该函数时返回的节点。updatePaintNodeData 提供了一个指向与该QQuickItem 关联的QSGTransformNode 的指针。
QSGNode *MyItem::updatePaintNode(QSGNode *node, UpdatePaintNodeData *)
{
QSGSimpleRectNode *n = static_cast<QSGSimpleRectNode *>(node);
if (!n) {
n = new QSGSimpleRectNode();
n->setColor(Qt::red);
}
n->setRect(boundingRect());
return n;
}在执行此函数期间,主线程会被阻塞,因此可以在主线程中安全地读取QQuickItem 实例及其他对象的值。
如果未调用 QQuickItem::updatePaintNode() 导致实际的场景图变化(例如QSGNode::markDirty() 或添加及移除节点),则底层实现可能会决定不再渲染该场景,因为视觉效果是相同的。
警告: 图形操作以及与场景图的交互必须 仅在渲染线程上进行,主要是在调用 QQuickItem::updatePaintNode() 期间。最佳经验法则是:仅在 QQuickItem::updatePaintNode() 函数内部使用以“QSG”为前缀的类。
警告:此 函数在渲染线程上调用。这意味着任何在此创建的 QObject 或线程局部存储都将与渲染线程相关联,因此在此函数中进行除渲染以外的任何操作时请务必谨慎。同样,信号也将在渲染线程上发出,因此通常会通过队列连接进行传递。
注意:所有 带有 QSG 前缀的类都应仅在场景图的渲染线程上使用。更多信息请参阅《场景图与渲染》。
另请参阅 QSGMaterial 、QSGGeometryNode 、QSGGeometry 、QSGFlatColorMaterial 、QSGTextureMaterial 、QSGNode::markDirty() 以及Graphics Resource Handling 。
[virtual protected] void QQuickItem::updatePolish()
该函数应根据该项的需求执行相应的布局操作。
当调用polish()时,场景图会为该项安排一个polish事件。当场景图准备渲染该项时,它会调用updatePolish(),在渲染下一帧之前按需执行任何项布局操作。
另请参阅 ensurePolished()。
QQuickItem *QQuickItem::viewportItem() const
如果设置了ItemObservesViewport 标志,则返回具有ItemIsViewport 标志的最近父级。如果未设置该标志,或者未找到其他视口项,则返回窗口的contentItem。
仅当不存在视口项且该项未在窗口中显示时,才返回 `nullptr `。
另请参阅 clipRect()。
[virtual protected] void QQuickItem::wheelEvent(QWheelEvent *event)
可以在子类中重写此事件处理程序,以接收某项的滚轮事件。事件信息由event 参数提供。
该事件默认会被接受,因此如果您重写此函数,则无需显式接受该事件。如果您不接受该事件,请调用event->ignore() 。
[protected] bool QQuickItem::widthValid() const
返回“width”属性是否已被显式设置。
QQuickWindow *QQuickItem::window() const
返回渲染此项的窗口。
在该项被分配到场景之前,它没有窗口。windowChanged() 信号会在该项进入场景和从场景中移除时分别发出通知。
[signal] void QQuickItem::windowChanged(QQuickWindow *window)
当该项的window 发生变化时,会触发此信号。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.







