QQuickItem 类
QQuickItem 类提供了 Qt Quick 中所有可视元素中最基本的功能。 更多信息...
头文件 | #include <QQuickItem> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
qmake | QT += quick |
由以下实例化 | 项目 |
继承 | QObject 和 QQmlParserStatus |
继承自 |
公共类型
联合体 | ItemChangeData |
枚举 | Flag { ItemClipsChildrenToShape, ItemAcceptsInputMethod, ItemIsFocusScope, ItemHasContents, ItemAcceptsDrops, …, ItemObservesViewport } |
标志 | 标志 |
枚举 | ItemChange { ItemChildAddedChange, ItemChildRemovedChange, ItemSceneChange, ItemVisibleHasChanged, ItemParentHasChanged, …, ItemEnabledHasChanged } |
枚举 | TransformOrigin { TopLeft, Top, TopRight, Left, Center, …, BottomRight } |
属性
|
公开函数
QQuickItem(QQuickItem *parent = nullptr) | |
虚拟 | ~QQuickItem() 覆盖 |
布尔 | acceptHoverEvents() const |
布尔 | acceptTouchEvents() const |
Qt::MouseButtons | acceptedMouseButtons() const |
布尔 | activeFocusOnTab() const |
布尔 | antialiasing() const |
qreal | baselineOffset() const |
QBindable<qreal> | bindableHeight() |
QBindable<qreal> | bindableWidth() |
QBindable<qreal> | bindableX() |
QBindable<qreal> | bindableY() |
虚拟 | boundingRect() const |
QQuickItem * | childAt(qreal x, qreal y) const |
QList<QQuickItem *> | childItems() const |
QRectF | childrenRect() |
布尔 | clip() const |
虚拟 | clipRect() const |
QObject * | containmentMask() const |
虚拟 | contains(const QPointF &point) const |
QCursor | cursor() const |
(自6.3起) void | dumpItemTree() const |
(自6.3起) void | ensurePolished() |
布尔 | filtersChildMouseEvents() const |
QQuickItem::Flags | flags() const |
Qt::FocusPolicy | focusPolicy() const |
void | forceActiveFocus() |
void | forceActiveFocus(Qt::FocusReason reason) |
QSharedPointer<QQuickItemGrabResult> | grabToImage(const QSize &targetSize = QSize()) |
布尔 | hasActiveFocus() const |
布尔 | hasFocus() const |
qreal | height() const |
qreal | implicitHeight() const |
qreal | implicitWidth() const |
虚拟 | inputMethodQuery(Qt::InputMethodQuery query) const |
布尔 | isAncestorOf(const QQuickItem *child) const |
布尔 | isEnabled() const |
布尔 | isFocusScope() const |
虚拟 | isTextureProvider() const |
布尔 | isVisible() const |
布尔 | keepMouseGrab() const |
布尔 | 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 |
布尔 | 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() |
保护函数
虚拟 | 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) |
(自6.0以来) virtual void | geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) |
布尔 | heightValid() const |
virtual void | hoverEnterEvent(QHoverEvent *event) |
virtual void | hoverLeaveEvent(QHoverEvent *event) |
virtual void | hoverMoveEvent(QHoverEvent *event) |
virtual void | inputMethodEvent(QInputMethodEvent *event) |
布尔 | 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) |
布尔 | widthValid() const |
重新实现的保护函数
virtual void | classBegin() override |
virtual void | componentComplete() override |
虚拟 | 事件(QEvent *ev) 覆盖 |
详细描述
Qt Quick中的所有视觉项目都继承自QQuickItem。尽管QQuickItem实例没有视觉外观,但它定义了所有视觉项目共有的属性,例如x和y位置、宽度和高度、锚定以及键处理支持。
可以通过扩展QQuickItem来提供具有这些特性的自定义视觉项目。
自定义场景图项
所有视觉QML项目都使用场景图渲染,默认实现是一个底层、高性能的渲染堆栈,与OpenGL、Vulkan、Metal或Direct 3D等加速图形API紧密关联。QQuickItem的子类可以通过设置QQuickItem::ItemHasContents标志和重写QQuickItem::updatePaintNode()函数,将它们自己的自定义内容添加到场景图中。
警告:图形操作和与场景图的交互必须在渲染线程上独家进行,主要是在updatePaintNode()调用期间。最好只在使用“QSG”前缀的类内使用QQuickItem::updatePaintNode()函数。
注意:带有QSG前缀的所有类应仅在场景图渲染线程中使用。有关更多信息,请参阅场景图和渲染。
图形资源处理
处理场景图中使用的图形资源的最佳方法是依靠节点的自动清理。从QQuickItem::updatePaintNode()返回的QSGNode将在正确的线程和正确的时间自动删除。使用QSGNode::OwnedByParent来管理QSGNode实例的树,该标志默认设置。因此,对于大多数自定义场景图项,无需额外工作。
存储图形资源在节点树之外的实施,如实现QQuickItem::textureProvider()的项目,需要根据该项目在QML中使用方式,正确地进行清理。需要处理的情况有:
- 场景图失效;这可能在使用QQuickWindow::hide()隐藏窗口或关闭窗口时发生,具体取决于平台和QQuickWindow配置。如果项目类实现了名为
invalidateSceneGraph()
的槽,则此槽将在渲染线程上被调用,同时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始终要快得多。
行为动画
如果您的项目使用Behavior类型来定义属性更改的动画,则在从C++修改这些属性时,您应始终使用QObject::setProperty()、QQmlProperty()或QMetaProperty::write()。这确保了QML引擎知道属性更改。否则,引擎将无法执行您请求的动画。请注意,这些函数会带来轻微的性能损失。更多详情请参见从C++访问QML对象类型的成员。
另请参阅:QQuickWindow和QQuickPaintedItem。
成员类型文档
枚举QQuickItem::Flag
标志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类型是
参见setFlag(), setFlags(), 和 flags。
枚举 QQuickItem::ItemChange
与QQuickItem::itemChange()一起使用,以通知项目有关某些类型的更改。
常数 | 值 | 描述 |
---|---|---|
QQuickItem::ItemChildAddedChange | 0 | 添加了子元素。《a href="qquickitem-itemchangedata.html#item-var" translate="no">ItemChangeData::item包含添加的子元素。 |
QQuickItem::ItemChildRemovedChange | 1 | 移除了子元素。《a href="qquickitem-itemchangedata.html#item-var" translate="no">ItemChangeData::item包含移除的子元素。 |
QQuickItem::ItemSceneChange | 2 | 项目被添加到或从场景中移除。指定渲染场景的《a href="qquickwindow.html" translate="no">QQuickWindow在ItemChangeData::window中使用。当项目从场景中移除时,窗口参数为null。 |
QQuickItem::ItemVisibleHasChanged | 3 | 项目的可见性已更改。《a href="qquickitem-itemchangedata.html#boolValue-var" translate="no">ItemChangeData::boolValue包含新的可见性。 |
QQuickItem::ItemParentHasChanged | 4 | 项目父对象已更改。《a href="qquickitem-itemchangedata.html#item-var" translate="no">ItemChangeData::item包含新父对象。 |
QQuickItem::ItemOpacityHasChanged | 5 | 项目的透明度已更改。《a href="qquickitem-itemchangedata.html#realValue-var" translate="no">ItemChangeData::realValue包含新的透明度。 |
QQuickItem::ItemActiveFocusHasChanged | 6 | 项目的焦点已更改。《a href="qquickitem-itemchangedata.html#boolValue-var" translate="no">ItemChangeData::boolValue包含项目是否有焦点。 |
QQuickItem::ItemRotationHasChanged | 7 | 项目的旋转已更改。《a href="qquickitem-itemchangedata.html#realValue-var" translate="no">ItemChangeData::realValue包含新的旋转。 |
QQuickItem::ItemDevicePixelRatioHasChanged | 9 | 项目所在屏幕的设备像素比已更改。《a href="qquickitem-itemchangedata.html#realValue-var" translate="no">ItemChangeData::realValue包含新的设备像素比。 |
QQuickItem::ItemAntialiasingHasChanged | 8 | 抗锯齿已更改。当前(布尔)值可以在QQuickItem::antialiasing中找到。 |
QQuickItem::ItemEnabledHasChanged | 10 | 项目的启用状态已更改。《a href="qquickitem-itemchangedata.html#boolValue-var" translate="no">ItemChangeData::boolValue包含新的启用状态。(自Qt 5.10起) |
枚举 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 | 项目的右下角。 |
属性文档
定义了Item的期望宽度和高度。
如果未指定 宽度 或 高度,则项目的有效尺寸将由其 隐式宽度 或 隐式高度 决定。
然而,如果一个项目是某个 布局 的子项,布局将使用其隐式尺寸来决定项目的首选尺寸。在这种情况下,显式的 宽度 或 高度 将被忽略。
大多数项目的默认隐式尺寸为 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 } }
[只读]
activeFocus : const bool
此只读属性指示项目是否具有活动焦点。
如果 activeFocus 为 true,则该项要么是当前接收键盘输入的项目,要么是当前接收键盘输入的项目的一个 FocusScope 祖先。
通常,通过将 focus 设置到项目及其封装的 FocusScope 对象中以获得 activeFocus。在以下示例中,input
和 focusScope
对象将拥有活动焦点,而根矩形对象则不会。
import QtQuick 2.0 Rectangle { width: 100; height: 100 FocusScope { focus: true TextInput { id: input focus: true } } }
访问函数
布尔 | hasActiveFocus() const |
通知信号
void | activeFocusChanged(bool) |
另请参阅:focus 和 Qt Quick 中的键盘焦点。
activeFocusOnTab : bool
此属性表示项目是否希望进入 Tab 焦点链。默认情况下,这设置为 false
。
访问函数
布尔 | activeFocusOnTab() const |
void | setActiveFocusOnTab(bool) |
通知信号
void | activeFocusOnTabChanged(bool) |
antialiasing : bool
指定项目是否进行抗锯齿。
由视觉元素使用来决定项目是否应该使用抗锯齿。在某些情况下,具有抗锯齿的项目需要更多的内存,并且可能渲染速度较慢(有关更多信息,请参见 抗锯齿)。
默认设置为 false,但可能被派生元素覆盖。
访问函数
布尔 | antialiasing() const |
void | setAntialiasing(bool) |
void | resetAntialiasing() |
通知信号
void | antialiasingChanged(bool) |
baselineOffset : qreal
指定项目基线在本地坐标系中的位置。
Text 项目的基线是文字所在的一条假想线。包含文字的控件通常将它们的基线设置为文字的基线。
对于非文字项,使用默认的基线偏移量 0。
访问函数
qreal | baselineOffset() const |
void | setBaselineOffset(qreal) |
通知信号
void | baselineOffsetChanged(qreal) |
[只读]
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() |
通知信号
void | childrenRectChanged(const QRectF &) |
clip : bool
此属性包含是否启用了裁剪。默认的裁剪值是 false
。
如果启用了裁剪,则项将剪裁自己的绘制,以及其子项的绘制,到其边框矩形。如果在项的绘制操作期间设置裁剪,请记住将其重置以防止裁剪您的场景的其余部分。
注意:裁剪可能会影响渲染性能。有关更多信息,请参阅裁剪。
注意:为了QML的利益,将裁剪设置为true
也会设置ItemIsViewport标志,这有时可以作为优化:具有ItemObservesViewport标志的子项可能放弃创建视口之外的场景图节点。但也可以单独设置ItemIsViewport
标志。
访问函数
布尔 | clip() const |
void | setClip(bool) |
通知信号
void | clipChanged(bool) |
containmentMask : QObject*
此属性包含要用于 contains() 方法的可选掩码,该方法主要用于用于每个 QPointerEvent 的击中测试。
默认情况下,contains() 对于位于 Item 边界框内的任何点将返回 true
。但任何 QQuickItem 或任何实现该形式函数的 QObject
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或将其绑定到项目的enabled
状态。
访问函数
布尔 | isEnabled() const |
void | setEnabled(bool) |
通知信号
void | enabledChanged() |
另请参阅visible。
focus : bool
此属性表示项目是否在封装的FocusScope内获得焦点。如果为真,则在封装的FocusScope获得活动焦点时,此项目将获得活动焦点。
在以下示例中,当scope
获得活动焦点时,input
将被给予活动焦点
import QtQuick 2.0 Rectangle { width: 100; height: 100 FocusScope { id: scope TextInput { id: input focus: true } } }
对于此属性,整个场景被假定为行为表现得像一个焦点范围。从实用的角度来看,这意味着以下QML将在启动时将活动焦点给予input
。
访问函数
布尔 | hasFocus() const |
void | setFocus(bool) |
void | setFocus(boolfocus, Qt::FocusReasonreason) |
通知信号
void | focusChanged(bool) |
另请参阅activeFocus和Qt Quick中的键盘焦点。
[since 6.7]
focusPolicy : Qt::FocusPolicy
此属性确定项目接受焦点的方式。
此属性是在Qt 6.7中引入的。
访问函数
Qt::FocusPolicy | focusPolicy() const |
void | setFocusPolicy(Qt::FocusPolicypolicy) |
通知信号
void | focusPolicyChanged(Qt::FocusPolicy) |
[可绑定]
高度 : qreal
注意:此属性支持QProperty绑定。
此属性表示此项目的高度。
不透明度 : qreal
此属性表示项目的不透明度。不透明度用介于0.0(完全透明)和1.0(完全不透明)之间的数字指定。默认值是1.0。
当设置此属性时,指定的不透明度也会分别应用于子项。这在某些情况下可能会导致意外的效果。例如,在下面的第二个矩形集中,红色矩形指定了不透明度为0.5,这影响了蓝色子矩形的透明度,即使子矩形没有指定透明度。
超出0到1范围的值将被限制。
修改某个项的不透明度不会影响该项是否接收到用户输入事件。(相比之下,将可见属性设置visible为false
将停止鼠标事件;将enabled属性设置为false
将停止鼠标和键盘事件,并从该项中删除活动焦点。)
访问函数
qreal | opacity() const |
void | setOpacity(qreal) |
通知信号
void | opacityChanged() |
另请参阅visible。
parent : QQuickItem*
此属性包含该项的视觉父项。
注意:视觉父项的概念与QObject父项的概念不同。QQuickItem 的视觉父项可能不一定与对象父项相同。有关详细信息,请参阅概念 - Qt Quick 中的视觉父项。
注意:此属性的信号通知在视觉父项销毁时会发出。C++信号处理程序不能假设视觉父项层次结构中的项仍完全构造。使用qobject_cast验证父项层次结构中的项是否可以作为预期类型安全地使用。
访问函数
QQuickItem * | parentItem() const |
void | setParentItem(QQuickItem *parent) |
通知信号
void | parentChanged(QQuickItem *) |
rotation : qreal
此属性包含项围绕其transformOrigin顺时针旋转的角度。
默认值为0度(即无旋转)。
访问函数
qreal | rotation() const |
void | setRotation(qreal) |
通知信号
void | rotationChanged() |
scale : qreal
此属性包含此项的缩放因子。
小于1.0的缩放使项以较小的尺寸渲染,而大于1.0的缩放使项以较大的尺寸渲染。负缩放会导致渲染时的项镜像。
默认值为1.0。
缩放从transformOrigin应用。
访问函数
qreal | scale() const |
void | setScale(qreal) |
通知信号
void | scaleChanged() |
smooth : bool
指定项是否平滑
主要用于基于图像的项,以决定该项应使用平滑采样还是非平滑采样。平滑采样通过线性插值执行,而非平滑采样通过最近邻执行。
在Qt Quick 2.0中,此属性对性能的影响非常有限。
默认情况下,此属性设置为true
。
访问函数
布尔 | smooth() const |
void | setSmooth(bool) |
通知信号
void | smoothChanged(bool) |
state : QString
此属性包含项当前状态的名称。
如果项在其默认状态下,即没有设置任何显式状态,则此属性包含一个空字符串。同样,您可以通过将此属性设置为空字符串来将项返回到其默认状态。
访问函数
QString | state() const |
void | setState(const QString &) |
通知信号
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
时,除非显式设置为 false
,否则子项的 visible
值将返回 true
。
(由于这种连锁反应,如果属性绑定应该仅对显式属性更改做出响应,则使用 visible
属性可能不会产生预期效果。在这种情况下,最好使用 opacity 属性代替。)
如果将此属性设置为 false
,则该项将不再接收鼠标事件,但仍将继续接收按键事件,如果已设置,将保持键盘 focus。(相比之下,将 enabled 属性设置为 false
将停止鼠标和键盘事件,并从该项中移除焦点。)
注意: 此属性的值仅受此属性或父项的 visible
属性更改的影响。它不会改变,例如,如果该项移出屏幕,或者如果 opacity 更改为 0。然而,出于历史原因,在构建项后即使该项尚未添加到场景中,此属性也为 true。对未添加到场景中的项更改或读取此属性可能不会产生预期的结果。
注意:此属性的信号通知在视觉父项销毁时会发出。C++信号处理程序不能假设视觉父项层次结构中的项仍完全构造。使用qobject_cast验证父项层次结构中的项是否可以作为预期类型安全地使用。
访问函数
布尔 | isVisible() const |
void | setVisible(bool) |
通知信号
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) |
通知信号
void | zChanged() |
成员函数文档
[explicit]
QQuickItem::QQuickItem(QQuickItem *parent = nullptr)
使用给定的 parent 构造一个 QQuickItem。
将 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
返回此项目的子项。
[虚保护]
bool QQuickItem::childMouseEventFilter(QQuickItem *item, QEvent *event)
重新实现此方法以过滤此项目子项接收到的指针事件。
仅当 filtersChildMouseEvents() 为 true
时,此方法才会被调用。
如果指定的 event 应该不传递给指定的子 item,则返回 true
,否则返回 false
。如果您返回 true
,则还应该 接受 或 忽略 事件,以指示是否停止或继续事件传播。然而,事件始终会发送到所有父级链上的 childMouseEventFilters。
注意:虽然名称如此,但此函数在将所有 QPointerEvent 实例传递给所有子项时(通常是鼠标、触摸和平板事件)都会过滤这些事件。在子类中覆盖此函数时,我们建议使用仅在 QPointerEvent 中找到的访问器编写通用的事件处理代码。或者,您可以根据 event->type()
和/或 event->device()->type()
切换来以不同的方式处理不同的事件类型。
注意:过滤只是分享在手势模糊不清的情况(例如在按下时,您不知道用户会点击还是拖动)责任的一种方式。另一种方式是在按下时调用 QPointerEvent::addPassiveGrabber(),以便充当的被动抓取者非排他性地监控 QEventPoint 的进度。在任何情况下,正在监视的项目或指针处理器都可以在稍后更改时窃取独占抓取,当时手势模式似乎符合期望的模式。
另请参阅setFiltersChildMouseEvents。
[重载虚保护]
void QQuickItem::classBegin()
重新实现:QQmlParserStatus::classBegin。
派生类应在添加
[虚]
QRectF QQuickItem::clipRect() const
如果存在视口并且设置了 ItemObservesViewport 标志,则返回在 viewportItem() 中当前可见的矩形区域;否则,返回此项目在其自身坐标系中的范围:从 0, 0
到 width() 和 height() 的矩形。这是如果 clip 为 true
时预计要可见的区域。它也可以用于在 updatePaintNode() 中限制添加到场景图的图形。
例如,一个大型图纸或大型文本文档可能显示在一个仅占用应用程序窗口一部分的Flickable中:在这种情况下,Flickable是视口项,自定义内容渲染项可能会选择省略当前可见区域之外的场景图节点。如果设置了ItemObservesViewport标志,则该区域将在用户在Flickable中滚动内容时改变。
在嵌套视口项的情况下,clipRect()是所有设置了ItemIsViewport标志的祖先的boundingRect
的交集,映射到this项的坐标系。
另请参阅boundingRect。
[覆盖虚拟受保护的]
void QQuickItem::componentComplete()
重新实现:QQmlParserStatus::componentComplete。
派生类应在添加自己的componentComplete时调用基类方法。
[虚拟可调用]
bool QQuickItem::contains(const QPointF &point) const
如果此类项包含局部坐标中的point,则返回true
;否则返回false
。
可以通过覆盖此函数来处理具有自定义形状的项的点碰撞。默认实现检查是否设置了containmentMask(),如果是,则检查点是否在置信区域内部;否则,检查点是否在边界框内部。
注意:此方法用于在事件传递期间对每个QEventPoint进行弹击测试,因此实现应尽可能轻量。
注意:该函数可以通过元对象系统从 QML 中调用。请参阅Q_INVOKABLE。
QCursor QQuickItem::cursor() const
返回此项的光标形状。
当鼠标光标悬停在该项上时,光标将采用此形状,除非设置了覆盖光标。有关一系列有用的形状,请参阅预定义光标对象列表。
如果没有设置光标形状,则返回一个具有Qt::ArrowCursor形状的光标;但是,如果有重叠项具有有效光标,则可能会显示其他光标形状。
另请参阅setCursor和unsetCursor。
[虚拟受保护的]
void QQuickItem::dragEnterEvent(QDragEnterEvent *event)
可以在子类中重写此事件处理器,以接收该项的拖放进入事件。事件信息由event参数提供。
仅当为该项设置了ItemAcceptsDrops标志时,才提供拖放事件。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[虚拟受保护的]
void QQuickItem::dragLeaveEvent(QDragLeaveEvent *event)
此事件处理程序可以被子类重新实现以接收项目的拖放离开事件。事件信息由 event 参数提供。
仅当为该项设置了ItemAcceptsDrops标志时,才提供拖放事件。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[虚保护]
void QQuickItem::dragMoveEvent(QDragMoveEvent *event)
此事件处理程序可以被子类重新实现以接收项目的拖放移动事件。事件信息由 event 参数提供。
仅当为该项设置了ItemAcceptsDrops标志时,才提供拖放事件。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[虚保护]
void QQuickItem::dropEvent(QDropEvent *event)
此事件处理程序可以被子类重新实现以接收项目的放下事件。事件信息由 event 参数提供。
仅当为该项设置了ItemAcceptsDrops标志时,才提供拖放事件。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[可调用,自 6.3 版起]
void QQuickItem::dumpItemTree() const
递归地以该项目开始,弃掉有关项目视觉树的某些详细信息。
注意: QObject::dumpObjectTree() 输出类似的树;但是,如Qt Quick - 视觉父概念中所述,项目QObject::parent() 有时与其 QQuickItem::parentItem 偶尔不同。你可以弃掉两个树以查看差异。
注意:Qt未来版本的输出格式可能发生变化。
注意:该函数可以通过元对象系统从 QML 中调用。请参阅Q_INVOKABLE。
此函数是在Qt 6.3版本中引入的。
另请参阅:调试技术 和 GammaRay的Qt Quick检查器。
[可调用,自 6.3 版起]
void QQuickItem::ensurePolished()
调用 updatePolish()
这有助于像布局(或定位器)这样的项目,它们在收到一个 PolishEvent 之前延迟计算其隐式宽度 (implicitWidth) 和隐式高度 (implicitHeight)。
通常,例如,向布局中添加或移除子项后,不会立即计算隐式大小(这是一种优化)。在某些情况下,你可能在添加子项后立即查询布局的隐式大小。如果是这种情况,在查询隐式大小之前使用此函数。
注意:该函数可以通过元对象系统从 QML 中调用。请参阅Q_INVOKABLE。
此函数是在Qt 6.3版本中引入的。
另请参阅:updatePolish() 和 polish。
[重写虚保护]
bool QQuickItem::event(QEvent *ev)
重写: QObject::event(QEvent *e)。
bool QQuickItem::filtersChildMouseEvents() const
返回是否应将指向此项目子项的指针事件过滤通过此项目。
如果此项目和一个子项都具有 acceptTouchEvents() true
,则在触摸交互发生时,此项目将过滤触摸事件。但是,如果项目或其子项无法处理触摸事件,则会调用 childMouseEventFilter 与合成的鼠标事件。
另请参阅 setFiltersChildMouseEvents() 和 childMouseEventFilter。
QQuickItem::Flags QQuickItem::flags() const
返回此项目的项目标志。
另请参阅 setFlags() 和 setFlag。
[虚,受保护]
void QQuickItem::focusInEvent(QFocusEvent *event)
此事件处理程序可以在子类中重实现以接收项目的焦点进入事件。事件信息由 event 参数提供。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
如果您重实现了此函数,您应该调用基类的实现。
[虚,受保护]
void QQuickItem::focusOutEvent(QFocusEvent *event)
此事件处理程序可以在子类中重实现以接收项目的焦点离开事件。事件信息由 event 参数提供。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[可调用]
void QQuickItem::forceActiveFocus()
强制在项目上设置活动焦点。
此方法将焦点设置到项目,并确保对象层次结构中的所有祖先 FocusScope 对象也获得 聚焦。
焦点更改的原因将是 Qt::OtherFocusReason。使用重载方法指定焦点原因,以实现更好的焦点更改处理。
注意:该函数可以通过元对象系统从 QML 中调用。请参阅Q_INVOKABLE。
另请参阅 activeFocus。
[可调用]
void QQuickItem::forceActiveFocus(Qt::FocusReason reason)
这是一个重载函数。
以给定 reason 的方式在项目上强制设置活动焦点。
此方法将焦点设置到项目,并确保对象层次结构中的所有祖先 FocusScope 对象也获得 聚焦。
注意:该函数可以通过元对象系统从 QML 中调用。请参阅Q_INVOKABLE。
另请参阅 activeFocus 和 Qt::FocusReason。
[虚,受保护,自 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 来指定目标图像的大小。默认情况下,结果将具有与项目相同的大小。
如果无法启动抓取,则函数返回 null
。
注意:此功能会将项目渲染到离屏表面,并将该表面从GPU内存复制到CPU内存,这可能相当昂贵。对于“实时”预览,请使用层或ShaderEffectSource。
另请参阅:QQuickWindow::grabWindow。
[受保护]
bool QQuickItem::heightValid() const
返回是否显式设置了高度属性。
[虚受保护]
void QQuickItem::hoverEnterEvent(QHoverEvent *event)
可以在此子类中重新实现此事件处理程序,以接收元素的悬停进入事件。事件信息由 event 参数提供。
如果 acceptHoverEvents 为 true,则会提供悬停事件。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[虚受保护]
void QQuickItem::hoverLeaveEvent(QHoverEvent *event)
可以在子类中重新实现此事件处理程序,以接收元素的悬停离开事件。事件信息由 event 参数提供。
如果 acceptHoverEvents 为 true,则会提供悬停事件。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[虚受保护]
void QQuickItem::hoverMoveEvent(QHoverEvent *event)
可以在子类中重新实现此事件处理程序,以接收元素的悬停移动事件。事件信息由 event 参数提供。
如果 acceptHoverEvents 为 true,则会提供悬停事件。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
qreal QQuickItem::implicitWidth() const
返回由确定内容的其他属性隐含的项宽度。
注意:这是属性 implicitWidth 的获取器函数。
另请参阅:setImplicitWidth。
[虚受保护]
void QQuickItem::inputMethodEvent(QInputMethodEvent *event)
可以在子类中重新实现此事件处理程序,以接收元素的输入方法事件。事件信息由 event 参数提供。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[虚]
QVariant QQuickItem::inputMethodQuery(Qt::InputMethodQuery query) const
此方法仅适用于输入项。
如果此项是输入项,则应重新实现此方法以返回给定 query 的相关输入方法标志。
另请参阅:QWidget::inputMethodQuery。
bool QQuickItem::isAncestorOf(const QQuickItem *child) const
如果此元素是 child 的祖先(即,如果是 child 的父项,或 child 的父项的祖先之一),则返回 true
。
另请参阅:parentItem。
[受保护]
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
如果鼠标输入应该独家与这个项目保持联系,则返回true。
另请参阅 setKeepMouseGrab()。
bool QQuickItem::keepTouchGrab() const
如果此项目捕获的触摸点应该独家与这个项目保持联系,则返回true。
另请参阅 setKeepTouchGrab()和keepMouseGrab。
[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组件添加弹出窗口。
注意:窗口定位由窗口管理器完成,此值仅被视为提示。因此,最终的窗口位置可能与预期不同。
注意:如果该项位于子场景中,例如映射到3D 模型对象,UV映射将包含在这个转换中,所以它实际上是从屏幕坐标到该项坐标,只要点实际上位于该项的范围内。其他映射函数尚不支持这种方式。
注意:该函数可以通过元对象系统从 QML 中调用。请参阅Q_INVOKABLE。
[可调用]
QPointF QQuickItem::mapFromItem(const QQuickItem *item, const QPointF &point) const
将给定的点在项的坐标系中映射到该项坐标系内的等效点,并返回映射后的坐标。
在映射中使用项目以下属性:x、y、scale、rotation、transformOrigin和transform。
如果项是nullptr
,则将点从场景坐标系映射过来。
注意:该函数可以通过元对象系统从 QML 中调用。请参阅Q_INVOKABLE。
QPointF QQuickItem::mapFromScene(const QPointF &point) const
将给定的点在场景的坐标系中映射到该项坐标系内的等效点,并返回映射后的坐标。
在映射中使用项目以下属性:x、y、scale、rotation、transformOrigin和transform。
QRectF QQuickItem::mapRectFromItem(const QQuickItem *item, const QRectF &rect) const
将给定的矩形在项的坐标系中映射到该项坐标系内的等效矩形区域,并返回映射后的矩形值。
在映射中使用项目以下属性:x、y、scale、rotation、transformOrigin和transform。
如果项是nullptr
,则将矩形从场景坐标系映射过来。
QRectF QQuickItem::mapRectFromScene(const QRectF &rect) const
将给定的矩形在场景的坐标系中映射到该项坐标系内的等效矩形区域,并返回映射后的矩形值。
在映射中使用项目以下属性:x、y、scale、rotation、transformOrigin和transform。
QRectF QQuickItem::mapRectToItem(const QQuickItem *item, const QRectF &rect) const
将给定的矩形在本次项的坐标系中映射到项坐标系内的等效矩形区域,并返回映射后的矩形值。
在映射中使用项目以下属性:x、y、scale、rotation、transformOrigin和transform。
如果项是nullptr
,则将矩形映射到场景坐标系。
QRectF QQuickItem::mapRectToScene(const QRectF &rect) const
将给定的矩形在本次项的坐标系中映射到场景坐标系内的等效矩形区域,并返回映射后的矩形值。
在映射中使用项目以下属性:x、y、scale、rotation、transformOrigin和transform。
[可调用]
QPointF QQuickItem::mapToGlobal(const QPointF &point) const
将给定的小点在此项的坐标系中映射到全局屏幕坐标系中的等效点,并返回映射的坐标。
在映射中使用项目以下属性:x、y、scale、rotation、transformOrigin和transform。
例如,这可能有助于向Qt Quick组件添加弹出窗口。
注意:窗口定位由窗口管理器完成,此值仅被视为提示。因此,最终的窗口位置可能与预期不同。
注意:该函数可以通过元对象系统从 QML 中调用。请参阅Q_INVOKABLE。
[可调用]
QPointF QQuickItem::mapToItem(const QQuickItem *item, const QPointF &point) const
将给定的小点在此项的坐标系中映射到项的坐标系中的等效点,并返回映射的坐标。
在映射中使用项目以下属性:x、y、scale、rotation、transformOrigin和transform。
如果 项 是 nullptr
,则此映射将 点 映射到场景的坐标系。
注意:该函数可以通过元对象系统从 QML 中调用。请参阅Q_INVOKABLE。
QPointF QQuickItem::mapToScene(const QPointF &point) const
将给定的小点在此项的坐标系中映射到场景坐标系的等效点,并返回映射的坐标。
在映射中使用项目以下属性:x、y、scale、rotation、transformOrigin和transform。
[虚受保护]
void QQuickItem::mouseDoubleClickEvent(QMouseEvent *event)
此事件处理器可以在子类中重新实现以接收项的鼠标双击事件。事件信息由 事件 参数提供。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[虚受保护]
void QQuickItem::mouseMoveEvent(QMouseEvent *event)
此事件处理器可以在子类中重新实现以接收项的鼠标移动事件。事件信息由 事件 参数提供。
为了接收鼠标移动事件,前面的鼠标按下事件必须被接受(通过重写 mousePressEvent 等),并且 acceptedMouseButtons() 必须返回相关的鼠标按钮。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[虚受保护]
void QQuickItem::mousePressEvent(QMouseEvent *event)
此事件处理器可以在子类中重新实现以接收项的鼠标按下事件。事件信息由 事件 参数提供。
为了接收鼠标按下事件,acceptedMouseButtons() 必须返回相关的鼠标按钮。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[虚受保护]
void QQuickItem::mouseReleaseEvent(QMouseEvent *event)
此事件处理器可以在子类中重新实现以接收项的鼠标释放事件。事件信息由 事件 参数提供。
为了接收鼠标释放事件,前面的鼠标按下事件必须被接受(通过重写 mousePressEvent 等)并且 acceptedMouseButtons() 必须返回相关的鼠标按钮。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[虚受保护]
void QQuickItem::mouseUngrabEvent()
此事件处理器可以在子类中重新实现以在发生鼠标未捕获事件时通知该项。
[可调用]
QQuickItem *QQuickItem::nextItemInFocusChain(bool forward = true)
返回此项目焦点链中下一个项目。如果 forward 为 true
或未提供,则表示正向方向的下个项目。如果 forward 为 false
,则表示反向方向的下个项目。
注意:该函数可以通过元对象系统从 QML 中调用。请参阅Q_INVOKABLE。
void QQuickItem::polish()
为此项目安排一个polish事件。
当场景图处理请求时,它将调用此项目上的 updatePolish()。
另请参阅updatePolish()、QQuickTest::qIsPolishScheduled() 和 ensurePolished()。
[虚拟受保护的]
void QQuickItem::releaseResources()
当项目应该释放由 QQuickItem::updatePaintNode() 返回的节点管理之外的所有图形资源时,将调用此函数。
这发生在项目即将从之前渲染的窗口中移除时。当函数被调用时,项目保证有一个 窗口。
此函数在GUI线程上调用,当它被使用时,渲染线程的状态是未知的。对象不应直接删除,而应使用 QQuickWindow::scheduleRenderJob() 协调清理。
另请参阅图形资源处理。
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 5 中,调用 setAcceptedMouseButtons() 会导致物品同时接收触摸和鼠标事件;但它建议调用 setAcceptTouchEvents() 以订阅它们。在 Qt 6 中,必须调用 setAcceptTouchEvents() 才能继续接收它们。
另请参阅acceptedMouseButtons。
void QQuickItem::setCursor(const QCursor &cursor)
设置此项目的光标形状。
另请参阅cursor() 和 unsetCursor()。
void QQuickItem::setFiltersChildMouseEvents(bool filter)
设置是否应通过此项目过滤针对此项目子项的指针事件。
如果 filter 为 true,当触发表项子项的指针事件时,将调用 childMouseEventFilter。
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,过滤项目将不会响应用户的相关触摸点。
如果 保持 为假,过滤项目可能窃取鼠标抓取。例如,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中的视觉父级。
void QQuickItem::stackBefore(const QQuickItem *sibling)
将指定的 sibling 项在子项列表中的索引移动到此项之前。子项的顺序影响视觉堆叠顺序和标签焦点导航顺序。
假设两项的z值相同,这将导致 sibling 在此项之上渲染。
如果两项都将 activeFocusOnTab 设置为 true
,这也会导致标签焦点顺序发生变化,sibling 将在此项之后获得焦点。
给定的 sibling 必须与此项是兄弟关系;也就是说,它们必须具有相同的直接 parent。
另请参阅 概念 - Qt Quick中的视觉父级。
[虚拟]
QSGTextureProvider *QQuickItem::textureProvider() const
返回项目的水印提供者。默认实现返回 nullptr
。
此函数只能在渲染线程上调用。
[虚拟受保护]
void QQuickItem::touchEvent(QTouchEvent *event)
可以在子类中重写此事件处理程序以接收项目的触摸事件。事件信息由参数 event 提供。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[虚拟受保护]
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() 调用期间进行。最好的做法是仅在使用“QSG”前缀的类中在 QQuickItem::updatePaintNode() 函数中使用。
注意: 此函数在渲染线程上调用。这意味着创建的任何 QObjects 或线程本地存储都将具有与渲染线程的亲和力,因此在执行此函数中除渲染以外的任何操作时都要小心。对于信号也是如此,它们将在渲染线程上发出,并且通常会通过排队连接发送。
注意:带有QSG前缀的所有类应仅在场景图渲染线程中使用。有关更多信息,请参阅场景图和渲染。
另请参阅 QSGMaterial、QSGGeometryNode、QSGGeometry、QSGFlatColorMaterial、QSGTextureMaterial、QSGNode::markDirty() 和 图形资源处理.
[virtual protected]
void QQuickItem::updatePolish()
此函数应执行所需为此项目执行的全部布局。
当调用polish() 函数时,场景图将为该项目安排一个抛光事件。当场景图准备渲染此项目时,它会调用updatePolish()方法来执行渲染下一帧之前所需的任何项目布局。
另请参阅ensurePolished().
QQuickItem *QQuickItem::viewportItem() const
如果设置了ItemObservesViewport 标志,则返回带有ItemIsViewport 标志的最近父项。如果没有设置此标志或找不到其他视口项目,则返回窗口的内容项。
仅在没有任何视口项且该项目不在窗口中显示时,返回 nullptr
。
另请参阅clipRect。
[虚拟受保护]
void QQuickItem::wheelEvent(QWheelEvent *event)
此事件处理器可以由子类重新实现以接收项目轮事件。事件信息通过event参数提供。
默认情况下接受事件,因此如果您重写此函数,则不需要显式接受事件。如果您不接受事件,请调用event->ignore()
。
[受保护]
bool QQuickItem::widthValid() const
返回是否明确设置了宽度属性。
QQuickWindow *QQuickItem::window() const
返回绘制此项的窗口。
直到项目被分配到场景中,该项才具有窗口。当项目进入或从场景移除时,windowChanged() 信号提供通知。
[信号]
void QQuickItem::windowChanged(QQuickWindow *window)
当项目的窗口发生变化时,发出此信号。
© 2024 The Qt Company Ltd. 本文档中包含的文档贡献是各自所有者的版权。此处提供的文档是在自由软件基金会发布的GNU自由文档许可第1.3版的条款下许可的。Qt及其标志是The Qt Company Ltd在芬兰和/或其他国家的商标。所有其他商标是其各自所有者的财产。