class QQmlContext#

QQmlContext 类定义了 QML 引擎内的上下文。 更多信息

Inheritance diagram of PySide6.QtQml.QQmlContext

概述#

方法#

注意

此文档可能包含从 C++ 自动翻译到 Python 的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译中的问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建一个工单来通知我们。

详细说明#

上下文存储了 QML 文档中通过 id 标识的对象。您可以使用 nameForObject()objectForName() 来检索它们。

注意

创建者的责任是删除它构建的任何 QQmlContext。如果不再需要 QQmlContext,则必须显式销毁它。确保这一点最简单的方法是为 QQmlContext 提供一个父级。

上下文层次结构#

上下文形成一个层次结构。这个层次结构的根是 QML 引擎的 root context。每个 QML 组件在实例化时会创建自己的上下文,有些 QML 元素也会为自己创建额外的上下文。

虽然上下文中实例化的 QML 对象并非严格属于该上下文,但它们的绑定是。如果一个上下文被销毁,未结业的 QML 对象的属性绑定将停止评估。

上下文属性#

上下文还允许数据暴露给 QML 引擎实例化的 QML 组件。此类数据对任何工具都不可见,包括 Qt Quick 编译器 以及相关 QML 文档的将来读者。只有在该特定 C++ 上下文中实例化 QML 组件时,才会暴露。在其他地方,可能会暴露不同的上下文数据。

您不应使用 QML 上下文将数据暴露给您的 QML 组件,而是应该创建额外的对象属性来保存数据,或使用 单例。有关详细信息,请参阅 将 C++ 状态暴露给 QML

每个 QQmlContext 都包含一组属性,这些属性与其 QObject 属性不同,允许通过名称显式地将数据绑定到上下文中。可以通过调用 setContextProperty() 定义和更新上下文属性。

为了简化绑定和大型数据集的维护,可以将上下文对象设置在 QQmlContext 上。上下文对象的所有属性都可以通过名称在上下文中访问,就像它们都是通过调用 setContextProperty() 分别添加的一样。属性值的更改通过属性的通知信号检测。设置上下文对象比手动添加和维护上下文属性值更快、更容易。

显式通过 setContextProperty() 添加的所有属性都优先于上下文对象的属性。

子上下文继承其父上下文的上下文属性;如果子上下文设置了父上下文中已经存在的上下文属性,则新的上下文属性会覆盖父属性。

警告

在该上下文中创建对象之后设置上下文对象或添加新的上下文属性是一个昂贵的操作(实际上强制所有绑定重新评估)。因此,如果您需要使用上下文属性,您至少应该在使用上下文创建任何对象之前完成上下文的“设置”。

另请参阅

将 C++ 类型的属性暴露给 QML

__init__(parent[, objParent=None])#
参数:

创建一个新的 QQmlContext 作为 engine 根上下文的子上下文,并作为 QObject parent

__init__(parent[, objParent=None])
参数:

使用给定的 parentContext 和 QObject parent 创建一个新的 QQmlContext

baseUrl()#
返回类型::

QUrl

返回组件的基本 URL,如果没有设置则返回包含该组件的组件的 URL。

另请参阅

setBaseUrl()

contextObject()#
返回类型::

QObject

返回上下文对象,如果没有上下文对象则返回 None

另请参阅

setContextObject()

contextProperty(arg__1)#
参数:

arg__1 – 字符串

返回类型::

object

返回此上下文的 name 属性值作为 QVariant。如果您知道要查找的属性在当前上下文中使用 QML id 分配的 QObject,那么使用 objectForName() 会更方便且更快。与 objectForName()nameForObject() 不同,此方法在当前上下文中找不到 name 时还会遍历上下文层次结构并在父上下文中搜索。它还会考虑您可能已设置的任何 contextObject()

engine()#
返回类型::

QQmlEngine

返回当前上下文的QQmlEngine,如果上下文中不存在QQmlEngine或者该QQmlEngine已被销毁,则返回None

importedScript(name)#
参数:

name – 字符串

返回类型::

QJSValue

isValid()#
返回类型::

布尔型

返回上下文是否有效。

要有效,上下文必须有一个引擎,并且如果有,它的contextObject也不应该被删除。

nameForObject(arg__1)#
参数:

arg__1QObject

返回类型::

字符串

返回在这个上下文中对象的名称,如果对象在这个上下文中没有被命名,则返回空字符串。对象通过setContextProperty、上下文对象的属性或QML创建上下文中的id进行命名。

如果对象有多个名称,则返回第一个。

contextProperty不同,此方法不遍历上下文层。如果在当前上下文中找不到该名称,则返回空字符串。

objectForName(arg__1)#
参数:

arg__1 – 字符串

返回类型::

QObject

返回上下文中给定名称的对象。如果在上下文中找不到name或与name关联的值不是QObject,则返回nullptr。对象通过setContextProperty、上下文对象的属性或QML创建上下文中的id进行命名。与contextProperty不同,此方法不遍历上下文层。如果在当前上下文中找不到该名称,则返回nullptr。

parentContext()#
返回类型::

QQmlContext

返回上下文的父QQmlContext,如果没有父上下文或者父上下文已被销毁,则返回None

resolvedUrl(arg__1)#
参数:

arg__1QUrl

返回类型::

QUrl

解析相对当前组件URL的URL src

另请参阅

baseUrl() setBaseUrl()

setBaseUrl(arg__1)#
参数:

arg__1QUrl

显式设置用于相对引用的resolvedUrl() URL。

调用此函数将覆盖默认使用的组件URL。

另请参阅

baseUrl() resolvedUrl()

setContextObject(arg__1)#
参数:

arg__1QObject

设置上下文的object

setContextProperties(properties)#
参数:

properties – .列表包含QQmlContext.PropertyPair

在此上下文中设置一系列的properties

一次性设置所有属性可以避免不必要的表达式刷新,因此建议使用它而不是为每个 individual property 调用setContextProperty()

注意

您不应使用上下文属性来向QML组件注入值。请使用单例或常规对象属性。

另请参阅

setContextProperty()

setContextProperty(arg__1, arg__2)#
参数:
  • arg__1 – 字符串

  • arg__2QObject

设置此上下文的 name 属性的 value

QQmlContext 不会对 value 保有所有权。

注意

您不应使用上下文属性来向QML组件注入值。请使用单例或常规对象属性。

另请参阅

contextProperty()

setContextProperty(arg__1, arg__2)
参数:
  • arg__1 – 字符串

  • arg__2 – 对象

设置此上下文的 name 属性的 value

注意

您不应使用上下文属性来向QML组件注入值。请使用单例或常规对象属性。