Home · All Classes · Modules  · QSS HELP  · QSS 案例 · VER007 HOME

QDeclarativeImageProvider Class Reference
[QtDeclarative module]

该QDeclarativeImageProvider类提供支持像素图和螺纹图像请求在QML的接口。More...

Types

Methods


Detailed Description

该QDeclarativeImageProvider类提供支持像素图和螺纹图像请求在QML的接口。

QDeclarativeImageProvider是用来提供在QML应用先进的图像加载功能。它允许在QML图像是:

要指定图像应该通过图像提供商加载,使用"image:"方案的图像的URL源,接着通过图像提供者和请求图像的标识符。例如:

 Image { source: "image://myimageprovider/image.png" }

这指定图像应该由名为“ myimageprovider ”的形象提供商被加载,并且要加载的图像被命名为“ image.png ” 。根据已通过注册的供应商的QML引擎调用相应的图像提供商QDeclarativeEngine.addImageProvider( ) 。

请注意,标识符是不区分大小写的,但是URL的其馀部分将被传递与保存情况。例如,下面的代码片段仍然会指定的图像是由一个名为“ myimageprovider ”的形象提供加载,但它会要求不同的图像比上面的代码片段( “ Image.png ”而不是“ image.png ” ) 。

 Image { source: "image://MyImageProvider/Image.png" }

如果你想要的URL的其馀部分是不区分大小写的,你将不得不采取的是自己的形象提供商内部的照顾。

An example

这里有两个图像。他们的source值表明它们应以命名为“颜色”的图像提供者被加载,并且要加载的图像是“黄色”和“红色” ,分别是:

 Column {
     Image { source: "image://colors/yellow" }
     Image { source: "image://colors/red" }
 }

当这些图像通过QML加载,它会寻找一个匹配的图像提供者和调用它的requestImage()或requestPixmap()方法(取决于其imageType())来加载图像。该方法被调用的id参数设置为“黄色”的第一映像,而“红色”为第二。

这里是一个图像提供商实现,可以加载由上面的QML要求的图像。此实现动态生成QPixmap那充满了请求的彩色图像:

 class ColorImageProvider : public QDeclarativeImageProvider
 {
 public:
     ColorImageProvider()
         : QDeclarativeImageProvider(QDeclarativeImageProvider.Pixmap)
     {
     }

     QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
     {
         int width = 100;
         int height = 50;

         if (size)
             *size = QSize(width, height);
         QPixmap pixmap(requestedSize.width() > 0 ? requestedSize.width() : width,
                        requestedSize.height() > 0 ? requestedSize.height() : height);
         pixmap.fill(QColor(id).rgba());

         return pixmap;
     }
 };

为了使这提供商访问QML ,它注册到QML引擎与“色”的标识符:

 int main(int argc, char *argv[])
 {
     ...

     QDeclarativeEngine engine;
     engine->addImageProvider(QLatin1String("colors"), new ColorPixmapProvider);

     ...
 }

现在,该图像可以成功加载在QML :

一个完整的例子可在Qt的examples/declarative/cppextensions/imageprovider目录。请注意该示例通过一个注册的供应商plugin而不是注册在应用程序中main()功能,如上所示。

Asynchronous image loading

支持图片提供商QImage自动加载包括对图像的异步加载的支持。要启用异步加载的图像源,设置asynchronous属性为true的相关ImageBorderImage or AnimatedImage对象。当启用此功能时,图像请求提供商是运行在一个低优先级的线程,让图像加载在后台被执行,并且减少了用户界面的性能影响。

不支持,提供图像提供商异步加载QPixmap而不是QImage值,像素映射只能在主线程中创建的。在这种情况下,如果asynchronous被设置为true,该值将被忽略和图像同步加载。

Image caching

由QDeclarativeImageProvider返回图像会自动缓存,类似于由QML引擎加载任何图像。当用“图像:/ / ”前缀的图像被从缓存中加载,requestImage()和requestPixmap( )不会被调用相关图像提供商。如果图像应始终从图像提供者获取,并且不应该在所有高速缓存中,设置cache属性为false的相关ImageBorderImage or AnimatedImage对象。


Type Documentation

QDeclarativeImageProvider.ImageType

定义此图像提供商支持的图像类型。

Constant Value Description
QDeclarativeImageProvider.Image 0 图像提供商提供QImage图像。该requestImage( )方法会被调用所有的图像请求。
QDeclarativeImageProvider.Pixmap 1 图像提供商提供QPixmap图像。该requestPixmap( )方法会被调用所有的图像请求。

Method Documentation

QDeclarativeImageProvider.__init__ (self, ImageType type)

创建一个图像提供商,将提供给定的图像type

QDeclarativeImageProvider.__init__ (self, QDeclarativeImageProvider)

ImageType QDeclarativeImageProvider.imageType (self)

返回此提供程序支持的图像类型。

QImage QDeclarativeImageProvider.requestImage (self, QString id, QSize size, QSize requestedSize)

实现此方法与返回的图像id。默认实现返回一个空的图像。

id是请求的图像源,以“形象: ”方案和提供商的标识去掉。例如,如果图像source在“图像:/ / MYPROVIDER /图标/家” ,给定的id将“图标/家” 。

requestedSize对应于Image.sourceSize通过图像元素要求。如果requestedSize是一个有效的大小,返回的图像应该是大小。

在所有情况下,size必须被设置到图像的原始大小。这是用于设置widthheight相关的Image如果这些值没有显式设置。

Note:这种方法可以被多个线程调用,因此确保该方法的实现是可重入的。

QPixmap QDeclarativeImageProvider.requestPixmap (self, QString id, QSize size, QSize requestedSize)

实现此方法与返回的像素图id。默认实现返回一个空的像素图。

id是请求的图像源,以“形象: ”方案和提供商的标识去掉。例如,如果图像source在“图像:/ / MYPROVIDER /图标/家” ,给定的id将“图标/家” 。

requestedSize对应于Image.sourceSize通过图像元素要求。如果requestedSize是一个有效的大小,返回的图像应该是大小。

在所有情况下,size必须被设置到图像的原始大小。这是用于设置widthheight相关的Image如果这些值没有显式设置。




PyQt 4.10.3 for X11 Copyright © Riverbank Computing Ltd and Nokia 2012 Qt 4.8.5