- class QQmlContext#
QQmlContext
类定义了 QML 引擎内的上下文。 更多信息…概述#
方法#
def
__init__()
def
baseUrl()
def
contextObject()
定义
engine()
定义
isValid()
定义
setBaseUrl()
注意
此文档可能包含从 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])#
- 参数:
parent –
QQmlEngine
objParent –
QObject
创建一个新的
QQmlContext
作为engine
根上下文的子上下文,并作为 QObjectparent
。- __init__(parent[, objParent=None])
- 参数:
parent –
QQmlContext
objParent –
QObject
使用给定的
parentContext
和 QObjectparent
创建一个新的QQmlContext
。返回组件的基本 URL,如果没有设置则返回包含该组件的组件的 URL。
另请参阅
返回上下文对象,如果没有上下文对象则返回
None
。另请参阅
- contextProperty(arg__1)#
- 参数:
arg__1 – 字符串
- 返回类型::
object
返回此上下文的
name
属性值作为 QVariant。如果您知道要查找的属性在当前上下文中使用 QML id 分配的 QObject,那么使用objectForName()
会更方便且更快。与objectForName()
和nameForObject()
不同,此方法在当前上下文中找不到name
时还会遍历上下文层次结构并在父上下文中搜索。它还会考虑您可能已设置的任何contextObject()
。- engine()#
- 返回类型::
返回当前上下文的
QQmlEngine
,如果上下文中不存在QQmlEngine
或者该QQmlEngine
已被销毁,则返回None
。-
isValid
()# - 返回类型::
布尔型
返回上下文是否有效。
要有效,上下文必须有一个引擎,并且如果有,它的contextObject也不应该被删除。
返回在这个上下文中对象的名称,如果对象在这个上下文中没有被命名,则返回空字符串。对象通过setContextProperty、上下文对象的属性或QML创建上下文中的id进行命名。
如果对象有多个名称,则返回第一个。
与contextProperty不同,此方法不遍历上下文层。如果在当前上下文中找不到该名称,则返回空字符串。
返回上下文中给定名称的对象。如果在上下文中找不到
name
或与name
关联的值不是QObject,则返回nullptr。对象通过setContextProperty、上下文对象的属性或QML创建上下文中的id进行命名。与contextProperty不同,此方法不遍历上下文层。如果在当前上下文中找不到该名称,则返回nullptr。- parentContext()#
- 返回类型::
返回上下文的父
QQmlContext
,如果没有父上下文或者父上下文已被销毁,则返回None
。解析相对当前组件URL的URL
src
。另请参阅
显式设置用于相对引用的
resolvedUrl()
URL。调用此函数将覆盖默认使用的组件URL。
另请参阅
设置上下文的
object
。- setContextProperties(properties)#
- 参数:
properties – .列表包含QQmlContext.PropertyPair
在此上下文中设置一系列的
properties
。一次性设置所有属性可以避免不必要的表达式刷新,因此建议使用它而不是为每个 individual property 调用
setContextProperty()
。设置此上下文的
name
属性的value
。QQmlContext
不会对value
保有所有权。- setContextProperty(arg__1, arg__2)
- 参数:
arg__1 – 字符串
arg__2 – 对象
设置此上下文的
name
属性的value
。注意
您不应使用上下文属性来向QML组件注入值。请使用单例或常规对象属性。