ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QQuickImageProvider的使用

2022-08-27 01:30:57  阅读:129  来源: 互联网

标签:QSize const QQuickImageProvider qml 使用 requestPixmap id 加载


一、概述

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" 
       }

 

标签:QSize,const,QQuickImageProvider,qml,使用,requestPixmap,id,加载
来源: https://www.cnblogs.com/tgc-3/p/16608537.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有