QQuickImageProvider的使用


一、概述

QQuickImageProvider用于在QML应用程序中提供高级图像的加载功能。(在c++中提供图像路径,编辑等底层数据交互逻辑,在qml端调用显示)它允许QML中的图像被:

  • 使用QPixmaps加载,而不是实际的图像文件。
  • 在一个单独的线程中异步加载。

二、具体用法

1、定义一个继承于QQuickImageProvider类的图像提供程序并实现,注意需要重写requestPixmap或函数requestImage

 

图像提供类的声明:

/*myimageproviter.h*/

 

#ifndef MYIMAGEPROVITER_H
#define MYIMAGEPROVITER_H
#include <QQuickImageProvider>

class MyImageProviter:public QQuickImageProvider    //图像提供程序
{
public:
    MyImageProviter() : QQuickImageProvider(QQuickImageProvider::Pixmap)    //构造函数
    {

    }

    QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize);  //重写requestPixmap函数
    QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize);    //重写requestImage函数
};

#endif // MYIMAGEPROVITER_H

 

 

图像提供类的实现:

/*myimageproviter.c*/

#include "myimageproviter.h"
#include <QPixmap>
#include <QCoreApplication>
#include <QPainter>
#include <QDebug>

//requestPixmap函数的重写,在qml中使用source加载图片时会自动调用requestPixmap或requestImage函数(根据图片类型不同),返回QPixmap或QImage对象
QPixmap MyImageProviter::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
{
    QString s=":/ima/" + id;        //本地图片加载路径的拼接,根据id不同可以调用不同图片
    QPixmap pix;                //新建一个QPixmap对象
    pix.load(s);                //加载图片
    pix=pix.scaled(150,250);    //图片缩放
    return pix;                 //返回QPixmap对象
}

 QImage MyImageProviter::requestImage(const QString &id, QSize *size, const QSize &requestedSize)
 {
    QImage im;
    im.load(":/ima/R-C.png");
    return im;
 }

 

 

2、使用QQmlEngine::addImageProvider 函数将图片提供类的对象(注册)到qml引擎中, 并且指定标识符, 该标识符在qml中使用。

/*main.cpp/*

 

    QQmlApplicationEngine engine;

    engine.addImageProvider("ima33",new MyImageProviter()); //将图像提供类注册到qml引擎中,在qml中标识符(名字)为"ima33"
    //engine.addImageProvider("标识符",图片提供类对象);

 

 

3、在qml中调用加载图片

需要使用 source: “image://标识符/图片id” 的格式来加载

/*main.qml*/

 

 

       Image {              //Image图片控件
           id: hhhhh
           x:200
           y:200
//           width: 135
//          height: 150
//           sourceSize.width: 120
//           sourceSize.height: 120
           source: "image://ima33/R-C.png"  //指定资源信息。会自动调用图片提供类的requestPixmap或requestImage函数,
       //将id、QSize等信息传给requestPixmap或requestImage函数的形参,返回QPixmap或QImage对象,并自动把图片画出来(加载出来)
         //source: "image://标识符/图片id" 
       }

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/282432.html

(0)
上一篇 2022年8月27日
下一篇 2022年8月27日

相关推荐

发表回复

登录后才能评论