QDeclarativeContext Class Reference

[QtDeclarative module]

该QDeclarativeContext类定义中的QML引擎的内容。More…

继承QObject

Methods

  • __init__ (self, QDeclarativeEngine engine, QObject parent = None)
  • __init__ (self, QDeclarativeContext context, QObject parent = None)
  • QUrl baseUrl (self)
  • QObject contextObject (self)
  • QVariant contextProperty (self, QString)
  • QDeclarativeEngine engine (self)
  • bool isValid (self)
  • QDeclarativeContext parentContext (self)
  • QUrl resolvedUrl (self, QUrl)
  • setBaseUrl (self, QUrl)
  • setContextObject (self, QObject)
  • setContextProperty (self, QString, QObject)
  • setContextProperty (self, QString, QVariant)

Detailed Description

该QDeclarativeContext类定义中的QML引擎的内容。

上下文允许数据被暴露在由QML引擎实例化的QML组件。

每个QDeclarativeContext包含的一组属性,其独特的QObject性质,即允许数据被明确地通过名称绑定到上下文。上下文属性都通过调用定义和更新QDeclarativeContext.setContextProperty( ) 。下面的例子显示了Qt的模型被绑定到一个上下文,然后从一个QML文件的访问。

  1. [QDeclarativeEngine]($docs-qdeclarativeengine.html) engine;
  2. [QStringListModel](qstringlistmodel.html) modelData;
  3. QDeclarativeContext *context = new QDeclarativeContext(engine.rootContext());
  4. context->setContextProperty("myModel", &modelData);
  5. [QDeclarativeComponent](qdeclarativecomponent.html) component(&engine);
  6. component.setData("import QtQuick 1.0\nListView { model: myModel }", [QUrl]($docs-qurl.html)());
  7. [QObject]($docs-qobject.html) *window = component.create(context);

注意它是创作者将其删除构建任何QDeclarativeContext责任。如果context在本例中的对象不再需要时window组件实例被破坏,context必须显式地销毁。确保这一点的最简单的方法是设置window作为父context

为了简化绑定和维护更大的数据集,一个上下文对象可以在QDeclarativeContext进行设置。是上下文对象的所有属性可通过名称的背景下,彷彿他们都分别通过调用添加QDeclarativeContext.setContextProperty( ) 。通过属性的通知信号被检测到更改属性的值。设置一个上下文对象是速度更快,比手动添加和维修器材上下文属性值更容易。

下面的例子中有相同的效果与前面的一个,但是它使用了一个上下文对象。

  1. class MyDataSet : ... {
  2. ...
  3. Q_PROPERTY([QAbstractItemModel](qabstractitemmodel.html) *myModel READ model NOTIFY modelChanged)
  4. ...
  5. };
  6. MyDataSet myDataSet;
  7. [QDeclarativeEngine]($docs-qdeclarativeengine.html) engine;
  8. QDeclarativeContext *context = new QDeclarativeContext(engine.rootContext());
  9. context->setContextObject(&myDataSet);
  10. [QDeclarativeComponent](qdeclarativecomponent.html) component(&engine);
  11. component.setData("import QtQuick 1.0\nListView { model: myModel }", [QUrl]($docs-qurl.html)());
  12. component.create(context);

通过明确添加的所有属性QDeclarativeContext.setContextProperty( )优先于上下文对象的属性。

The Context Hierarchy

上下文可以形成一个分层结构。这个层次结构的根是QML引擎的root context。儿童上下文继承父母的上下文属性,如果一个孩子的上下文设置已经存在于它的父上下文属性,新的上下文属性将复盖母公司。

下面的示例定义两个上下文 - context1context2。第二个方面复盖从先用一个新值继承了“b”的内容属性。

  1. [QDeclarativeEngine]($docs-qdeclarativeengine.html) engine;
  2. QDeclarativeContext *context1 = new QDeclarativeContext(engine.rootContext());
  3. QDeclarativeContext *context2 = new QDeclarativeContext(context1);
  4. context1->setContextProperty("a", 12);
  5. context1->setContextProperty("b", 12);
  6. context2->setContextProperty("b", 15);

而在实例化一个上下文QML对象不严格的情况下拥有的,绑定。如果上下文被销毁,优秀的QML对象的属性绑定将停止评估。

Warning:设置上下文对象或之后有物体在这种情况下被创建增加新的内容属性是一个昂贵的操作(实际上是强迫所有绑定重新评估) 。因此,只要有可能,你应该使用它来创建任何对象之前完成上下文的“设置” 。


Method Documentation

  1. QDeclarativeContext.__init__ (self, QDeclarativeEngine engine, QObject parent = None)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

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

  1. QDeclarativeContext.__init__ (self, QDeclarativeContext context, QObject parent = None)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

创建一个新的QDeclarativeContext用给定的parentContextQObject parent

  1. QUrl QDeclarativeContext.baseUrl (self)

[

返回组件的基本URL ,或含有成分,如果没有被设置。

]($docs-qurl.html)

See also setBaseUrl( ) 。

  1. QObject QDeclarativeContext.contextObject (self)

[

返回上下文对象,或0 ,如果没有上下文对象。

]($docs-qobject.html)

See also setContextObject( ) 。

  1. QVariant QDeclarativeContext.contextProperty (self, QString)

返回的值name属性这方面的QVariant

See also setContextProperty( ) 。

  1. QDeclarativeEngine QDeclarativeContext.engine (self)

返回上下文的QDeclarativeEngine,或者0,如果上下文没有QDeclarativeEngineQDeclarativeEngine被摧毁。

  1. bool QDeclarativeContext.isValid (self)

返回上下文是否有效。

是有效的,上下文必须有一个发动机,它的contextObject() ,如果有的话,必须没有被删除。

  1. QDeclarativeContext QDeclarativeContext.parentContext (self)

返回上下文的父QDeclarativeContext,或者0,如果这方面没有父或父已被破坏。

  1. QUrl QDeclarativeContext.resolvedUrl (self, QUrl)

[

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

]($docs-qurl.html)

See also QDeclarativeEngine.baseUrl()和setBaseUrl( ) 。

  1. QDeclarativeContext.setBaseUrl (self, QUrl)

显式设置的URLresolvedUrl( )将使用相对引用baseUrl

调用此函数将复盖默认使用的含有成分的url 。

See also baseUrl()和resolvedUrl( ) 。

  1. QDeclarativeContext.setContextObject (self, QObject)

设置上下文object

See also contextObject( ) 。

  1. QDeclarativeContext.setContextProperty (self, QString, QObject)

设置valuename财产这方面。

QDeclarativeContextnot取得其所有权value

See also contextProperty( ) 。

  1. QDeclarativeContext.setContextProperty (self, QString, QVariant)

设置的valuename财产这方面。