QDeclarativeComponent Class Reference

[QtDeclarative module]

该QDeclarativeComponent类封装了QML组件定义。More…

继承QObject

Types

  • enum Status { Null, Ready, Loading, Error }

Methods

  • __init__ (self, QDeclarativeEngine, QObject parent = None)
  • __init__ (self, QDeclarativeEngine, QString fileName, QObject parent = None)
  • __init__ (self, QDeclarativeEngine, QUrl url, QObject parent = None)
  • QObject beginCreate (self, QDeclarativeContext)
  • completeCreate (self)
  • QObject create (self, QDeclarativeContext context = None)
  • QDeclarativeContext creationContext (self)
  • list-of-QDeclarativeError errors (self)
  • bool isError (self)
  • bool isLoading (self)
  • bool isNull (self)
  • bool isReady (self)
  • loadUrl (self, QUrl url)
  • float progress (self)
  • setData (self, QByteArray, QUrl baseUrl)
  • Status status (self)
  • QUrl url (self)

Qt Signals

  • void progressChanged (qreal)
  • void statusChanged (QDeclarativeComponent::Status)

Detailed Description

该QDeclarativeComponent类封装了QML组件定义。

组件是可重用的,封装QML元素具有定义良好的接口。他们往往在定义Component Files

一个QDeclarativeComponent实例可以从QML文件中创建。例如,如果有一个main.qml文件是这样的:

  1. import QtQuick 1.0
  2. [Item]($docs-index.htm) {
  3. width: 200
  4. height: 200
  5. }

下面的代码加载这个QML文件作为一个组件,使用创建该组件的一个实例create( ) ,然后查询Itemwidth价值:

  1. [QDeclarativeEngine](qdeclarativeengine.html) *engine = new [QDeclarativeEngine](qdeclarativeengine.html);
  2. QDeclarativeComponent component(engine, [QUrl](qurl.html).fromLocalFile("main.qml"));
  3. [QObject]($docs-qobject.html) *myObject = component.create();
  4. [QDeclarativeItem](qdeclarativeitem.html) *item = qobject_cast<[QDeclarativeItem](qdeclarativeitem.html)*>(myObject);
  5. int width = item->width(); // width = 200

Network Components

如果传递给QDeclarativeComponent URL是一个网络资源,或者QML文档引用的网络资源,将QDeclarativeComponent具有获取网络数据之前,它能够创建对象。在这种情况下, QDeclarativeComponent将有Loading status。应用程序将不得不等待,直到该组件是Ready打电话之前QDeclarativeComponent.create( ) 。

下面的示例演示如何加载从网络资源中的QML文件。创建QDeclarativeComponent后,它测试组件是否被加载。如果是,它连接到QDeclarativeComponent.statusChanged( )信号,否则调用continueLoading()方法直接。需要注意的是QDeclarativeComponent.isLoading( )可能是假的网络组件,如果该组件已被缓存,并立即准备就绪。

  1. MyApplication.MyApplication()
  2. {
  3. // ...
  4. component = new QDeclarativeComponent(engine, [QUrl](qurl.html)("http://www.example.com/main.qml"));
  5. if (component->isLoading())
  6. [QObject]($docs-qobject.html).connect(component, SIGNAL(statusChanged(QDeclarativeComponent.Status)),
  7. this, SLOT(continueLoading()));
  8. else
  9. continueLoading();
  10. }
  11. void MyApplication.continueLoading()
  12. {
  13. if (component->isError()) {
  14. qWarning() << component->errors();
  15. } else {
  16. [QObject]($docs-qobject.html) *myObject = component->create();
  17. }
  18. }

Type Documentation

  1. QDeclarativeComponent.Status

指定的加载状态QDeclarativeComponent

Constant Value Description
QDeclarativeComponent.Null 0 This QDeclarativeComponent没有数据。通话loadUrl()或setData()添加QML内容。
QDeclarativeComponent.Ready 1 This QDeclarativeComponent准备就绪,create( )可以被调用。
QDeclarativeComponent.Loading 2 This QDeclarativeComponent正在加载网络数据。
QDeclarativeComponent.Error 3 发生了错误。通话errors( )来获取{列表QDeclarativeError{ } }错误。

Method Documentation

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

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

创建QDeclarativeComponent没有数据,并给它指定engineparent。与设定的数据setData( ) 。

  1. QDeclarativeComponent.__init__ (self, QDeclarativeEngine, QString fileName, QObject parent = None)

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

  1. QDeclarativeComponent.__init__ (self, QDeclarativeEngine, QUrl url, QObject parent = None)

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

创建QDeclarativeComponent从给定的fileName并给它指定parentengine

See also loadUrl( ) 。

  1. QObject QDeclarativeComponent.beginCreate (self, QDeclarativeContext)

这种方法提供了更高级的控制组件实例的创建。一般情况下,程序员应该使用QDeclarativeComponent.create()来创建一个组件。

此组件创建一个对象实例。返回0,如果创建失败。context指定一个要在其中创建对象实例的上下文。

When QDeclarativeComponent构造一个实例,它发生在三个步骤:

  1. 对象层次被创建,并且常数值分配。
  2. 物业绑定进行评估的第一次。
  3. 如果适用,QDeclarativeParserStatus.componentComplete()被调用的对象。

QDeclarativeComponent.beginCreate ( )不同于QDeclarativeComponent.create() ,因为它仅执行步骤1 。QDeclarativeComponent.completeCreate( )必须被调用来完成步骤2和3 。

使用附加属性时,将信息传达给一个实例化的组件,因为它可以让它们的初始值进行配置之前,物业绑定生效,这突破点有时是有用的。

  1. QDeclarativeComponent.completeCreate (self)

这种方法提供了更高级的控制组件实例的创建。一般情况下,程序员应该使用QDeclarativeComponent.create()来创建一个组件。

完成组件创建开始QDeclarativeComponent.beginCreate( ) 。

  1. QObject QDeclarativeComponent.create (self, QDeclarativeContext context = None)

[

此组件创建一个对象实例。返回0,如果创建失败。context指定一个要在其中创建对象实例的上下文。

]($docs-qobject.html)

If context为0 (默认值) ,它会在引擎的创建实例root context

  1. QDeclarativeContext QDeclarativeComponent.creationContext (self)

返回QDeclarativeContext该组件被创建。这是仅适用于直接从QML创建的组件。

  1. list-of-QDeclarativeError QDeclarativeComponent.errors (self)

返回的最后一个编译期间发生的错误的列表或创建操作。如果返回空列表isError( )未设置。

  1. bool QDeclarativeComponent.isError (self)

返回True如果status()==QDeclarativeComponent.Error

  1. bool QDeclarativeComponent.isLoading (self)

返回True如果status()==QDeclarativeComponent.Loading

  1. bool QDeclarativeComponent.isNull (self)

返回True如果status()==QDeclarativeComponent.Null

  1. bool QDeclarativeComponent.isReady (self)

返回True如果status()==QDeclarativeComponent.Ready

  1. QDeclarativeComponent.loadUrl (self, QUrl url)

加载QDeclarativeComponent从所提供的url

确保所提供的URL是充分和正确的,尤其是借QUrl.fromLocalFile( )装载从本地文件系统中的文件时。

  1. float QDeclarativeComponent.progress (self)
  1. QDeclarativeComponent.setData (self, QByteArray, QUrl baseUrl)

设置QDeclarativeComponent使用给定的QMLdata。如果url被提供,它是用来设置该组件的名称和提供一个基本路径由该元件得到解决的项目。

  1. Status QDeclarativeComponent.status (self)

  1. QUrl QDeclarativeComponent.url (self)

[


Qt Signal Documentation

  1. void progressChanged (qreal)

这是该信号的默认超载。

每当发射组件的加载进度的变化。progress将介于0.0 (无负载)和1.0 (成品)目前的进展。

  1. void statusChanged (QDeclarativeComponent::Status)

这是该信号的默认超载。

每当发射组件的状态变化。status将新的状态。

](qurl.html)