QQuickItem Class
QQuickItem 类为 .NET Framework 中的所有可视化项目提供了最基本的功能。 Qt Quick.更多
Header: | #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 } |
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 |
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 | 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 | activeFocusChanged(bool) |
void | activeFocusOnTabChanged(bool) |
void | antialiasingChanged(bool) |
void | baselineOffsetChanged(qreal) |
void | childrenRectChanged(const QRectF &) |
void | clipChanged(bool) |
void | containmentMaskChanged() |
void | enabledChanged() |
void | focusChanged(bool) |
void | focusPolicyChanged(Qt::FocusPolicy) |
void | heightChanged() |
void | implicitHeightChanged() |
void | implicitWidthChanged() |
void | opacityChanged() |
void | parentChanged(QQuickItem *) |
void | rotationChanged() |
void | scaleChanged() |
void | smoothChanged(bool) |
void | stateChanged(const QString &) |
void | transformOriginChanged(QQuickItem::TransformOrigin) |
void | visibleChanged() |
void | widthChanged() |
void | windowChanged(QQuickWindow *window) |
void | xChanged() |
void | yChanged() |
void | zChanged() |
受保护函数
虚拟 bool | childMouseEventFilter(QQuickItem*item, QEvent*event) |
虚拟 void | dragEnterEvent(QDragEnterEvent*event) |
虚拟 void | dragLeaveEvent(QDragLeaveEvent*event) |
虚拟 void | dragMoveEvent(QDragMoveEvent*event) |
虚拟 void | dropEvent(QDropEvent*event) |
虚拟 void | focusInEvent(QFocusEvent*event) |
虚拟 void | focusOutEvent(QFocusEvent*event) |
(since 6.0) 虚拟 void | geometryChange(const QRectF&newGeometry, const QRectF&oldGeometry) |
bool | heightValid() const |
虚拟 void | hoverEnterEvent(QHoverEvent*event) |
虚拟 void | hoverLeaveEvent(QHoverEvent*event) |
虚拟 void | hoverMoveEvent(QHoverEvent*event) |
虚拟 void | inputMethodEvent(QInputMethodEvent*event) |
bool | isComponentComplete()常量 |
虚拟 void | itemChange(QQuickItem::ItemChangechange, const QQuickItem::ItemChangeData&value) |
虚拟 void | keyPressEvent(QKeyEvent*event) |
虚拟 void | keyReleaseEvent(QKeyEvent*event) |
虚拟 void | mouseDoubleClickEvent(QMouseEvent*event) |
虚拟 void | mouseMoveEvent(QMouseEvent*event) |
虚拟 void | mousePressEvent(QMouseEvent*event) |
虚拟 void | mouseReleaseEvent(QMouseEvent*event) |
虚拟 void | mouseUngrabEvent() |
虚拟 void | releaseResources() |
虚拟 void | touchEvent(QTouchEvent*event) |
虚拟 void | touchUngrabEvent() |
void | updateInputMethod(Qt::InputMethodQueriesqueries= Qt::ImQueryInput) |
虚拟 QSGNode * | updatePaintNode(QSGNode*oldNode, QQuickItem::UpdatePaintNodeData*updatePaintNodeData) |
虚拟 void | updatePolish() |
虚拟 void | wheelEvent(QWheelEvent*event) |
bool | widthValid()常量 |
重新实现的受保护函数
virtual void | classBegin() override |
virtual void | componentComplete() override |
virtual bool | event(QEvent *ev) override |
详细说明
Qt Quick 中的所有可视化项目都继承自 QQuickItem。虽然 QQuickItem 实例没有可视化外观,但它定义了所有可视化项通用的属性,如 x 和 y 位置、宽度和高度、锚定和按键处理支持。
你可以子类化 QQuickItem,以提供继承了这些功能的自定义可视化项。
自定义场景图项
所有可视化 QML 项目都是使用场景图渲染的,其默认实现是一个低级、高性能的渲染堆栈,与加速图形 API(如 OpenGL、Vulkan、Metal 或 Direct 3D)密切相关。QQuickItem 的子类可以通过设置QQuickItem::ItemHasContents 标志和重新实现QQuickItem::updatePaintNode() 函数,将自己的自定义内容添加到场景图中。
警告 图形操作和与场景图的交互必须完全在渲染线程上进行,主要是在调用updatePaintNode() 时。最好的经验法则是只在QQuickItem::updatePaintNode() 函数中使用带有 "QSG "前缀的类。
注意: 所有带有 QSG 前缀的类都只能在场景图的渲染线程中使用。更多信息,请参阅场景图和渲染。
图形资源处理
处理清理场景图中使用的图形资源的首选方法是依靠节点的自动清理。从QQuickItem::updatePaintNode() 返回的QSGNode 会在正确的时间在正确的线程上自动删除。QSGNode 实例的树是通过使用QSGNode::OwnedByParent 来管理的,默认设置为 。因此,对于大多数自定义场景图项来说,无需额外工作。
在节点树外存储图形资源的实现,如实现QQuickItem::textureProvider() 的项目,需要根据 QML 中项目的使用方式,小心正确地清理它。需要处理的情况有
- 场景图失效;这可能发生在使用QQuickWindow::hide() 隐藏窗口或关闭窗口时,具体取决于平台和QQuickWindow 配置。如果项目类实现了名为
invalidateSceneGraph()
的slot
,那么当 GUI 线程阻塞时,渲染线程将调用此槽。这相当于连接到QQuickWindow::sceneGraphInvalidated() 。通过 OpenGL 渲染时,调用此槽时将绑定此项目窗口的 OpenGL 上下文。唯一的例外是原生 OpenGL 已在 Qt 控制之外被销毁,例如通过EGL_CONTEXT_LOST
。 - 项目从场景中移除;如果一个项目从场景中移除,例如因为它的父项目被设置为
null
或另一个窗口中的项目,QQuickItem::releaseResources() 将在 GUI 线程上被调用。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 对象类型的成员(Accessing Members of a QML Object Type from C++)。
另请参阅 QQuickWindow 和QQuickPaintedItem 。
成员类型文档
枚举 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> 的类型定义。它存储 Flag 值的 OR 组合。
另请参阅 setFlag()、setFlags() 和flags()。
enum QQuickItem::ItemChange
与QQuickItem::itemChange() 结合使用,用于通知项目某些类型的更改。
常数 | 值 | 说明 |
---|---|---|
QQuickItem::ItemChildAddedChange | 0 | 添加了一个子代。ItemChangeData::item 包含添加的子代。 |
QQuickItem::ItemChildRemovedChange | 1 | 删除了一个子代。ItemChangeData::item 包含删除的子代。 |
QQuickItem::ItemSceneChange | 2 | 项目已添加到场景或已从场景中移除。渲染场景的QQuickWindow 在ItemChangeData::window 中指定。当项目从场景中移除时,窗口参数为空。 |
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 起) |
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()。
属性文档
定义项目的首选宽度或高度。
如果未指定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 ofText 或TextEdit 并显式设置宽度会影响性能,因为文本必须布局两次。
[read-only]
activeFocus : const bool
此只读属性指示项目是否有活动焦点。
如果 activeFocus 为 true,则当前接收键盘输入的是该项目,或者该项目是当前接收键盘输入的项目的FocusScope 祖先。
通常,activeFocus 是通过在项目及其外围FocusScope 对象上设置focus 而获得的。在下面的示例中,input
和focusScope
对象将拥有活动焦点,而根矩形对象则没有。
import QtQuick 2.0 Rectangle { width: 100; height: 100 FocusScope { focus: true TextInput { id: input focus: true } } }
访问功能:
bool | hasActiveFocus() const |
Notifier 信号:
void | activeFocusChanged(bool) |
另请参阅 focus 和 Qt Quick 中的键盘焦点。
activeFocusOnTab : bool
该属性用于确定项目是否处于选项卡焦点链中。默认情况下,该属性设置为false
。
注意: {QStyleHints::tabFocusBehavior}{tabFocusBehavior} 可以进一步将焦点限制在特定类型的控件上,如文本或列表控件。在 macOS 上就是这种情况,特定控件的焦点可能会根据系统设置受到限制。
访问功能:
bool | activeFocusOnTab() const |
void | setActiveFocusOnTab(bool) |
Notifier 信号:
void | activeFocusOnTabChanged(bool) |
另请参见 QStyleHints::tabFocusBehavior 和focusPolicy 。
antialiasing : bool
指定是否对项目进行抗锯齿处理
由可视化元素决定项目是否使用抗锯齿。在某些情况下,使用反锯齿的项目需要更多内存,渲染速度也可能更慢(详情请查看反锯齿)。
默认值为 false,但可由派生元素重载。
访问函数:
bool | antialiasing() const |
void | setAntialiasing(bool) |
void | resetAntialiasing() |
通知信号:
void | antialiasingChanged(bool) |
baselineOffset : qreal
指定项目基线在本地坐标中的位置。
Text 项目的基线是文本所在的虚线。包含文本的控件通常将其基线设置为文本的基线。
对于非文本项目,默认基线偏移量为 0。
访问功能:
qreal | baselineOffset() const |
void | setBaselineOffset(qreal) |
通知信号:
void | baselineOffsetChanged(qreal) |
[read-only]
childrenRect : const 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() |
Notifier 信号:
void | childrenRectChanged(const QRectF &) |
clip : bool
此属性表示是否启用剪辑。默认 clip 值为false
。
如果启用了剪辑,项目将剪辑其自身的绘制以及其子项目的绘制,使之与项目的边界矩形保持一致。如果在项目的绘制操作过程中设置了剪辑,请记得重新设置,以防止剪辑场景的其他部分。
注意: 剪切会影响渲染性能。更多信息,请参阅 "剪切"。
注: 出于 QML 的考虑,将 clip 设置为true
时也会设置ItemIsViewport 标志,这有时会起到优化作用:带有ItemObservesViewport 标志的子项目可能会放弃创建位于视口之外的场景图节点。但ItemIsViewport
标志也可以单独设置。
访问功能:
bool | clip() const |
void | setClip(bool) |
通知信号
void | clipChanged(bool) |
containmentMask : QObject*
该属性包含一个可选的掩码,用于contains() 方法,该方法主要用于对每个QPointerEvent 进行命中测试。
默认情况下,contains() 将返回 Item 边界框内任意点的true
。QObject 但是,任何QQuickItem ,或任何实现形式为
Q_INVOKABLE bool contains(const QPointF &point) const;
形式的函数的任何 或 都可以用作掩码,将命中测试推迟到该对象。
注意: contains() 在事件传递过程中被频繁调用。如果该对象的contains() 方法效率不高,containmentMask() 可能会导致性能问题。如果您实现了一个自定义的QQuickItem 子类,也可以覆盖contains() 方法。
访问函数:
QObject * | containmentMask() const |
void | setContainmentMask(QObject *mask) |
Notifier 信号:
void | containmentMaskChanged() |
另请参见 contains()。
enabled : bool
此属性表示项目是否接收鼠标和键盘事件。默认为 true。
设置该属性会直接影响子项目的enabled
值。当设置为false
时,所有子项目的enabled
值也将变为false
。设置为true
时,除非已明确设置为false
,否则子项目的enabled
值将返回true
。
将此属性设置为false
会自动导致activeFocus 被设置为false
,并且此项目将不再接收键盘事件。
注: 悬停事件可通过setAcceptHoverEvents() 单独启用。因此,即使将此属性设置为false
,禁用项仍可继续接收悬停事件。这样,即使禁用了交互式项目,也可以显示信息反馈(如ToolTip )。对于作为该项目子项添加的任何HoverHandlers 也是如此。不过,HoverHandler 也可以明确为disabled ,或绑定到项目的enabled
状态。
访问功能:
bool | isEnabled() const |
void | setEnabled(bool) |
Notifier 信号:
void | enabledChanged() |
另请参阅 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) |
Notifier 信号:
void | focusChanged(bool) |
另请参阅 activeFocus 和 Qt Quick 中的 Keyboard Focus(键盘焦点)。
[since 6.7]
focusPolicy : Qt::FocusPolicy
该属性决定了项目接受焦点的方式。
该属性在 Qt 6.7 中引入。
访问函数:
Qt::FocusPolicy | focusPolicy() const |
void | setFocusPolicy(Qt::FocusPolicy policy) |
Notifier 信号:
void | focusPolicyChanged(Qt::FocusPolicy) |
[bindable]
height : qreal
注: 此属性支持QProperty 绑定。
此属性保存此项目的高度。
opacity : qreal
此属性表示项目的不透明度。不透明度指定为介于 0.0(完全透明)和 1.0(完全不透明)之间的数字。默认值为 1.0。
设置此属性后,指定的不透明度也会单独应用到子项上。在某些情况下,这可能会产生意想不到的效果。例如,在下面的第二组矩形中,红色矩形指定的不透明度为 0.5,这会影响其蓝色子矩形的不透明度,即使子矩形没有指定不透明度。
超出 0 至 1 范围的值将被箝位。
更改项目的不透明度不会影响项目是否接收用户输入事件。(相反,将visible 属性设置为false
会停止鼠标事件,将enabled 属性设置为false
会停止鼠标和键盘事件,同时也会移除项目的活动焦点)。
访问功能:
qreal | opacity() const |
void | setOpacity(qreal) |
Notifier 信号:
void | opacityChanged() |
另请参阅 visible 。
parent : QQuickItem*
该属性包含项目的视觉父级。
注意: 视觉父级的概念与QObject 父级的概念不同。项目的视觉父级不一定与其对象父级相同。详情请参阅 Qt Quick 中的概念 - 视觉父级。
注意: 该属性的通知信号会在视觉父对象销毁时发出。C++ 信号处理程序不能假定可视化父层次结构中的项目仍然完全构建。请使用qobject_cast 验证父层次结构中的项目是否可以作为预期类型安全使用。
访问函数:
QQuickItem * | parentItem() const |
void | setParentItem(QQuickItem *parent) |
Notifier 信号:
void | parentChanged(QQuickItem *) |
rotation : qreal
该属性表示项目围绕其transformOrigin 顺时针旋转的度数。
默认值为 0 度(即不旋转)。
访问功能:
qreal | rotation() const |
void | setRotation(qreal) |
Notifier 信号:
void | rotationChanged() |
scale : qreal
此属性用于保存此项目的缩放因子。
缩放比例小于 1.0 会使项目以较小的尺寸呈现,而大于 1.0 则会使项目以较大的尺寸呈现。负缩放比例会导致项目在渲染时被镜像。
默认值为 1.0。
缩放是从transformOrigin 应用的。
访问功能:
qreal | scale() const |
void | setScale(qreal) |
Notifier 信号:
void | scaleChanged() |
smooth : bool
指定是否对项目进行平滑处理
主要用于基于图像的项目,以决定项目是否应使用平滑采样。平滑采样使用线性插值,而非平滑采样使用最近邻值。
在Qt Quick 2.0 中,该属性对性能的影响很小。
默认情况下,此属性设置为true
。
访问功能:
bool | smooth() const |
void | setSmooth(bool) |
通知信号:
void | smoothChanged(bool) |
state : QString
该属性包含项目当前状态的名称。
如果项目处于默认状态,即未设置显式状态,则此属性为空字符串。同样,也可以通过将此属性设置为空字符串,将项目恢复到默认状态。
访问函数:
QString | state() const |
void | setState(const QString &) |
Notifier 信号:
void | stateChanged(const QString &) |
另请参阅 Qt Quick 状态。
transformOrigin : TransformOrigin
该属性用于保存缩放和旋转变换所围绕的原点。
如下图所示,共有九个变换原点可供选择。默认的变换原点是Item.Center
。
访问功能:
QQuickItem::TransformOrigin | transformOrigin() const |
void | setTransformOrigin(QQuickItem::TransformOrigin) |
通知信号:
void | transformOriginChanged(QQuickItem::TransformOrigin) |
visible : bool
此属性表示项目是否可见。默认为 "true"。
设置该属性会直接影响子项目的visible
值。当设置为false
时,所有子项目的visible
值也将变为false
。当设置为true
时,子项目的visible
值将返回到true
,除非它们被明确设置为false
。
(由于这种流动行为,如果属性绑定只响应显式属性更改,则使用visible
属性可能达不到预期效果。在这种情况下,最好使用opacity 属性)。
如果将此属性设置为false
,项目将不再接收鼠标事件,但会继续接收按键事件,并保留键盘focus (如果已设置键盘 )。(相反,如果将enabled 属性设置为false
,则会同时停止鼠标和键盘事件,并移除项目的焦点)。
注意: 该属性的值只受该属性或父级visible
属性更改的影响。例如,如果该项目移动到屏幕外,或者opacity 变为 0,该值都不会改变。不过,由于历史原因,该属性在项目创建后为真,即使该项目尚未添加到场景中也是如此。更改或读取尚未添加到场景中的项目的此属性可能不会产生预期的结果。
注意: 该属性的通知信号会在可视化父对象销毁时发出。C++ 信号处理程序不能假定可视化父层次结构中的项目仍然完全构建。请使用qobject_cast 验证父层次结构中的项目是否可以作为预期类型安全使用。
访问函数:
bool | isVisible() const |
void | setVisible(bool) |
Notifier 信号:
void | visibleChanged() |
[bindable]
width : qreal
注: 此属性支持QProperty 绑定。
此属性保存此项目的宽度。
[bindable]
x : qreal
注: 该属性支持QProperty 绑定。
定义项目相对于父级的 x 位置。
[bindable]
y : qreal
注: 该属性支持QProperty 绑定。
定义项目相对于父级的 y 位置。
z : qreal
设置同级项目的堆叠顺序。默认情况下,堆叠顺序为 0。
堆叠值较高的项目绘制在堆叠值较低的同级项目之上。堆叠值相同的项目按出现顺序自下而上绘制。堆叠值为负数的项目将绘制在父级内容的下方。
下面的示例显示了堆叠顺序的各种效果。
相同z - 后面的子代在前面的子代之上:
| |
较高的z 在上面:
| |
相同z - 子女在父母之上:
| |
下方z :
|
访问功能:
qreal | z() const |
void | setZ(qreal) |
Notifier 信号:
void | zChanged() |
成员函数文档
[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
Returns the first visible child item found at point (x,y) within the coordinate system of this item.
如果没有此项目,则返回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 将始终发送给父链条上的所有子鼠标事件过滤器。
注: 尽管名称如此,但该函数在向所有子代发送(通常是鼠标、触摸和平板电脑事件)时,会过滤所有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
如果存在视口且设置了ItemObservesViewport 标志,则返回此项目在viewportItem() 中当前可见的矩形区域;否则,返回此项目在其自身坐标系中的范围:从0, 0
到width() 和height() 的矩形区域。如果clip 是true
,该区域将保持可见。它也可用于updatePaintNode() 以限制添加到场景图中的图形。
例如,一幅大型图画或一个大型文本文档可能会在 Flickable 中显示,而 Flickable 只占据应用程序窗口的一部分:在这种情况下,Flickable 就是视口项,自定义内容渲染项可以选择省略当前可见区域以外的场景图节点。如果设置了ItemObservesViewport 标志,用户每次滚动 Flickable 中的内容时,该区域都会发生变化。
对于嵌套视口项目,clipRect() 是所有设置了ItemIsViewport 标志的祖先的boundingRect
s 的交集,并映射到此项目的坐标系。
另请参阅 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)
该事件处理程序可在子类中重新实现,以接收项目的拖入事件。事件信息由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
以递归方式转储从该项目开始的项目可视化树的一些细节。
注意: QObject::dumpObjectTree() 会转储一个类似的树;但是,正如在概念 -Qt Quick 中的可视化父节点中解释的那样,一个项目的QObject::parent() 有时会不同于它的QQuickItem::parentItem()。您可以转存这两棵树,以查看两者的区别。
注: 在未来的 Qt 版本中,确切的输出格式可能会改变。
注: 可通过元对象系统和 QML 调用此函数。请参见Q_INVOKABLE 。
此函数在 Qt 6.3 中引入。
另请参阅 调试技巧和GammaRay 的Qt Quick Inspector。
[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
返回高度属性是否已明确设置。
[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 。
[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 。
该函数在图形用户界面线程上调用,使用时渲染线程的状态未知。不应直接删除对象,而应使用QQuickWindow::scheduleRenderJob() 进行计划清理。
另请参见 Graphics Resource Handling 。
QQuickItem *QQuickItem::scopedFocusItem() const
如果此项目是焦点范围,则返回其焦点链中当前具有焦点的项目。
如果此项目不是焦点范围,则返回nullptr
。
void QQuickItem::setAcceptHoverEvents(bool enabled)
如果enabled 为 true,则设置该项目接受悬停事件;否则,该项目不接受悬停事件。
另请参见 acceptHoverEvents().
void QQuickItem::setAcceptTouchEvents(bool enabled)
如果enabled 为 true,则设置该项目接受触摸事件;否则,该项目不接受触摸事件。
另请参阅 acceptTouchEvents().
void QQuickItem::setAcceptedMouseButtons(Qt::MouseButtons buttons)
将此项目接受的鼠标按钮设置为buttons 。
注: 在 Qt XML 5 中,调用 setAcceptedMouseButtons() 会隐式地使项目接收触摸事件以及鼠标事件;但建议调用setAcceptTouchEvents() 来订阅它们。在 Qt XML 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 为假,过滤项目可能会窃取抓取内容。例如,如果Flickable 检测到用户开始移动视口,它就会尝试窃取鼠标抓取。
另请参阅 keepMouseGrab().
void QQuickItem::setKeepTouchGrab(bool keep)
设置此项目抓取的触摸点是否只能保留在此项目中。
这对于希望按照预定义手势抓取并保留特定触摸点的项目非常有用。例如,对水平触摸点移动感兴趣的项目可以在超过阈值后将 setKeepTouchGrab 设为 true。一旦 setKeepTouchGrab 设置为 true,过滤项目将不会对相关触摸点做出反应。
如果keep 为假,过滤项目可能会窃取抓取。例如,如果Flickable 检测到用户已开始移动视口,它可能会尝试窃取触摸点抓取。
另请参阅 keepTouchGrab() 和setKeepMouseGrab()。
void QQuickItem::setSize(const QSizeF &size)
将项目的大小设置为size 。该方法保留了现有的宽度和高度绑定;因此,任何触发绑定再次执行的更改都将覆盖设置值。
另请参阅 size,setWidth, 和setHeight 。
QSizeF QQuickItem::size() const
返回项目的大小。
void QQuickItem::stackAfter(const QQuickItem *sibling)
将指定的sibling 项目移动到子项目列表中该项目之后的索引处。子项目的顺序会影响视觉堆叠顺序和标签焦点导航顺序。
假设两个项目的 Z 值相同,这将使sibling 呈现在此项目的下方。
如果两个项目的activeFocusOnTab 都设置为true
,这也将导致标签页焦点顺序发生变化,sibling 将在此项目之前获得焦点。
给定的sibling 必须是此项目的同级项目;也就是说,它们必须有相同的直接parent 。
另请参阅 Qt Quick 中的 Concepts - Visual Parent。
void QQuickItem::stackBefore(const QQuickItem *sibling)
将指定的sibling 项目移动到子项目列表中该项目之前的索引处。子项目的顺序会影响视觉堆叠顺序和标签焦点导航顺序。
假设两个项目的 Z 值相同,这将使sibling 呈现在此项目之上。
如果两个项目的activeFocusOnTab 都设置为true
,这也会导致标签页焦点顺序发生变化,sibling 会在此项目之后获得焦点。
给定的sibling 必须是此项目的同级项目;也就是说,它们必须有相同的直接parent 。
另请参阅 Qt Quick 中的 Concepts - Visual Parent。
[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 "前缀的类。
警告: 此函数在渲染线程上调用。这意味着创建的任何 QObjects 或线程本地存储都将与渲染线程有亲缘关系,因此在此函数中进行渲染以外的操作时要小心谨慎。同样,信号也会在呈现线程上发出,因此通常会通过队列连接传送。
注意: 所有带有 QSG 前缀的类都只能在场景图的渲染线程中使用。更多信息请参见场景图和渲染。
另请参阅 QSGMaterial,QSGGeometryNode,QSGGeometry,QSGFlatColorMaterial,QSGTextureMaterial,QSGNode::markDirty() 和Graphics Resource Handling 。
[virtual protected]
void QQuickItem::updatePolish()
该函数应根据需要为该项目执行任何布局。
调用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
返回宽度属性是否已明确设置。
QQuickWindow *QQuickItem::window() const
返回渲染此项目的窗口。
项目在分配到场景中之前没有窗口。windowChanged() 信号会在项目进入场景和从场景中移除时发出通知。
[signal]
void QQuickItem::windowChanged(QQuickWindow *window)
当项目的window 发生变化时会发出该信号。
© 2025 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.