PySide6.QtQml.QQmlContext

class QQmlContext

QQmlContext 类定义了 QML 引擎中的一个上下文。More_

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 Compiler和未来阅读相关QML文档的读者。只有在您设想的特定C++上下文中实例化QML组件时,这些数据才会被暴露。在其他地方,可能会暴露不同的上下文数据。

与其使用QML上下文将数据暴露给您的QML组件,您应该创建额外的对象属性来保存数据或使用singletons。有关详细说明,请参见Exposing C++ State to QML

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

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

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

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

警告

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

另请参阅

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

__init__(parent[, objParent=None])
Parameters:

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

__init__(parent[, objParent=None])
Parameters:

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

baseUrl()
Return type:

QUrl

返回组件的基础URL,如果未设置,则返回包含组件的基础URL。

另请参阅

setBaseUrl()

contextObject()
Return type:

QObject

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

另请参阅

setContextObject()

contextProperty(name)
Parameters:

name – str

Return type:

对象

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

engine()
Return type:

QQmlEngine

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

importedScript(name)
Parameters:

name – str

Return type:

QJSValue

isValid()
Return type:

布尔

返回上下文是否有效。

要有效,上下文必须有一个引擎,并且它的contextObject()(如果有的话)必须没有被删除。

nameForObject(object)
Parameters:

对象QObject

Return type:

字符串

返回在此上下文中object的名称,如果object在上下文中未命名,则返回空字符串。对象通过setContextProperty()命名,或作为上下文对象的属性命名,或在QML创建的上下文中通过id命名。

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

contextProperty()不同,此方法不会遍历上下文层次结构。如果在当前上下文中未找到名称,则返回空字符串。

objectForName(name)
Parameters:

name – str

Return type:

QObject

返回在此上下文中给定name的对象。如果name在上下文中不可用或与name关联的值不是QObject,则返回nullptr。对象通过setContextProperty()命名,或作为上下文对象的属性,或在QML创建的上下文中通过id命名。与contextProperty()不同,此方法不会遍历上下文层次结构。如果在当前上下文中未找到名称,则返回nullptr。

parentContext()
Return type:

QQmlContext

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

resolvedUrl(src)
Parameters:

srcQUrl

Return type:

QUrl

解析相对于包含组件URL的src URL。

另请参阅

baseUrl() setBaseUrl()

setBaseUrl(baseUrl)
Parameters:

baseUrlQUrl

明确设置URL resolvedUrl() 将用于相对引用到 baseUrl

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

另请参阅

baseUrl() resolvedUrl()

setContextObject(object)
Parameters:

对象QObject

设置上下文 object

注意

您不应使用上下文对象将值注入到您的QML组件中。请改用单例或常规对象属性。

另请参阅

contextObject()

setContextProperties(properties)
Parameters:

属性 – .QQmlContext.PropertyPair 的列表

在此上下文中设置一批properties

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

注意

您不应使用上下文属性将值注入到您的QML组件中。请改用单例或常规对象属性。

另请参阅

setContextProperty()

setContextProperty(name, value)
Parameters:

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

QQmlContext 拥有 value 的所有权。

注意

您不应使用上下文属性将值注入到您的QML组件中。请改用单例或常规对象属性。

另请参阅

contextProperty()

setContextProperty(name, value)
Parameters:
  • name – str

  • value – 对象

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

注意

您不应使用上下文属性将值注入到您的QML组件中。应改用单例或常规对象属性。

class PropertyPair

注意

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

详细描述

PySide6.QtQml.QQmlContext.PropertyPair.name
PySide6.QtQml.QQmlContext.PropertyPair.value