您的位置:首页 > 产品设计 > UI/UE

用QQuickImageProvider给Image组件添加图片

2018-02-01 11:22 225 查看
本节最终解决为qml文件中的Image元素提供QImage类型的图片。利用到的类即QQuickImageProvider

最终需要提供的Image元素在main.qml文件中如下:

[cpp] view
plain copy

Image {

id: screenImg

}

Connections {

target: client // 目标对象

onCallQmlRefeshImg: {//连接自定义类Client来的信号,表示要刷新图片

screenImg.source=""//更新图片

screenImg.source= "image://screen"//image:必须

}

在main中为我们的“screen”注册:

[cpp] view
plain copy

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

{

QGuiApplication app(argc, argv);

Client *client=new Client;

QtQuick2ApplicationViewer viewer;

viewer.engine()->rootContext()->setContextProperty("client", client); // 将新的类映射为QML的一个对象,c++交互

viewer.engine()->addImageProvider(QLatin1String("screen"), client->imgProvider);//这句一个要在下一句之前,为引擎添加图片提供

viewer.setMainQmlFile(QStringLiteral("qml/remoteContralClient/main.qml"));

viewer.showExpanded();

return app.exec();

}

screenImageProvider.h图片提供类:

[cpp] view
plain copy

#ifndef SCREENIMAGEPROVIDER_H

#define SCREENIMAGEPROVIDER_H

#include <QQuickImageProvider>

#include <QImage>

#include <QSize>

#include <QColor>

class ScreenImageProvider : public QQuickImageProvider

{

public:

ScreenImageProvider()

: QQuickImageProvider(QQuickImageProvider::Image)

{

}

QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize)//这个是自动调用的。路径"image://screen",如需要使用id等参数,如"image://screen/id"等

{

return this->img;

}

QImage img;

};

#endif // SCREENIMAGEPROVIDER_H

在Client中为ScreenImageProvider 中的img添加图片

[cpp] view
plain copy

class Client : public QObject

{

Q_OBJECT

public:

explicit Client(QObject *parent = 0);

ScreenImageProvider *imgProvider;

signals:

void callQmlRefeshImg();

private:

QImage img;

}

Client实现部分某地方:

[cpp] view
plain copy

QByteArray a;

in>>a;//in是一个datastream,从网络中获取了图片。

img.QImage::loadFromData(a);

imgProvider->img=img;//将图片传输给imgProvider类的img

emit callQmlRefeshImg();//告诉qml要刷新图片

除可以提供QImage外,同理。还可以是QPixmap
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐