PySide6.QtQml.QQmlContext¶
- class QQmlContext¶
QQmlContext类定义了 QML 引擎中的一个上下文。More_…概要¶
方法¶
def
__init__()def
baseUrl()def
contextObject()def
engine()def
importedScript()def
isValid()def
nameForObject()def
objectForName()def
parentContext()def
resolvedUrl()def
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 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:
parent –
QQmlContextobjParent –
QObject
使用给定的
parentContext和QObjectparent创建一个新的QQmlContext。- __init__(parent[, objParent=None])
- Parameters:
parent –
QQmlEngineobjParent –
QObject
创建一个新的
QQmlContext作为engine根上下文的子上下文,以及QObjectparent。返回组件的基础URL,如果未设置,则返回包含组件的基础URL。
另请参阅
返回上下文对象,如果没有上下文对象则返回
None。另请参阅
- contextProperty(name)¶
- Parameters:
name – str
- Return type:
对象
返回此上下文中
name属性的值作为QVariant。如果您知道您正在寻找的属性是使用QML id在当前上下文中分配的QObject,objectForName()更方便且更快。与objectForName()和nameForObject()相比,如果在当前上下文中未找到name,此方法会遍历上下文层次结构并在父上下文中搜索。它还会考虑您可能设置的任何contextObject()。- engine()¶
- Return type:
返回上下文的
QQmlEngine,如果上下文没有QQmlEngine或者QQmlEngine已被销毁,则返回None。- isValid()¶
- Return type:
布尔
返回上下文是否有效。
要有效,上下文必须有一个引擎,并且它的
contextObject()(如果有的话)必须没有被删除。返回在此上下文中
object的名称,如果object在上下文中未命名,则返回空字符串。对象通过setContextProperty()命名,或作为上下文对象的属性命名,或在QML创建的上下文中通过id命名。如果对象有多个名称,则返回第一个。
与
contextProperty()不同,此方法不会遍历上下文层次结构。如果在当前上下文中未找到名称,则返回空字符串。返回在此上下文中给定
name的对象。如果name在上下文中不可用或与name关联的值不是QObject,则返回nullptr。对象通过setContextProperty()命名,或作为上下文对象的属性,或在QML创建的上下文中通过id命名。与contextProperty()不同,此方法不会遍历上下文层次结构。如果在当前上下文中未找到名称,则返回nullptr。- parentContext()¶
- Return type:
返回上下文的父级
QQmlContext,如果此上下文没有父级或父级已被销毁,则返回None。解析相对于包含组件URL的
srcURL。另请参阅
明确设置URL
resolvedUrl()将用于相对引用到baseUrl。调用此函数将覆盖默认使用的包含组件的URL。
另请参阅
设置上下文
object。- setContextProperties(properties)¶
- Parameters:
属性 – .QQmlContext.PropertyPair 的列表
在此上下文中设置一批
properties。一次性设置所有属性可以避免不必要的刷新表达式,因此建议这样做,而不是为每个单独属性调用
setContextProperty()。设置此上下文中
name属性的value。QQmlContext不拥有value的所有权。- 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¶