Home · All Classes · Modules · QSS HELP · QSS 案例 · VER007 HOME |
该QDeclarativeImageProvider类提供支持像素图和螺纹图像请求在QML的接口。More...
该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的其馀部分是不区分大小写的,你将不得不采取的是自己的形象提供商内部的照顾。
这里有两个图像。他们的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()功能,如上所示。
支持图片提供商QImage自动加载包括对图像的异步加载的支持。要启用异步加载的图像源,设置asynchronous属性为true的相关Image,BorderImage or AnimatedImage对象。当启用此功能时,图像请求提供商是运行在一个低优先级的线程,让图像加载在后台被执行,并且减少了用户界面的性能影响。
不支持,提供图像提供商异步加载QPixmap而不是QImage值,像素映射只能在主线程中创建的。在这种情况下,如果asynchronous被设置为true,该值将被忽略和图像同步加载。
由QDeclarativeImageProvider返回图像会自动缓存,类似于由QML引擎加载任何图像。当用“图像:/ / ”前缀的图像被从缓存中加载,requestImage()和requestPixmap( )不会被调用相关图像提供商。如果图像应始终从图像提供者获取,并且不应该在所有高速缓存中,设置cache属性为false的相关Image,BorderImage or AnimatedImage对象。
定义此图像提供商支持的图像类型。
Constant | Value | Description |
---|---|---|
QDeclarativeImageProvider.Image | 0 | 图像提供商提供QImage图像。该requestImage( )方法会被调用所有的图像请求。 |
QDeclarativeImageProvider.Pixmap | 1 | 图像提供商提供QPixmap图像。该requestPixmap( )方法会被调用所有的图像请求。 |
创建一个图像提供商,将提供给定的图像type。
返回此提供程序支持的图像类型。
实现此方法与返回的图像id。默认实现返回一个空的图像。
该id是请求的图像源,以“形象: ”方案和提供商的标识去掉。例如,如果图像source在“图像:/ / MYPROVIDER /图标/家” ,给定的id将“图标/家” 。
该requestedSize对应于Image.sourceSize通过图像元素要求。如果requestedSize是一个有效的大小,返回的图像应该是大小。
在所有情况下,size必须被设置到图像的原始大小。这是用于设置width和height相关的Image如果这些值没有显式设置。
Note:这种方法可以被多个线程调用,因此确保该方法的实现是可重入的。
实现此方法与返回的像素图id。默认实现返回一个空的像素图。
该id是请求的图像源,以“形象: ”方案和提供商的标识去掉。例如,如果图像source在“图像:/ / MYPROVIDER /图标/家” ,给定的id将“图标/家” 。
该requestedSize对应于Image.sourceSize通过图像元素要求。如果requestedSize是一个有效的大小,返回的图像应该是大小。
在所有情况下,size必须被设置到图像的原始大小。这是用于设置width和height相关的Image如果这些值没有显式设置。
PyQt 4.10.3 for X11 | Copyright © Riverbank Computing Ltd and Nokia 2012 | Qt 4.8.5 |