用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
最终需要提供的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
相关文章推荐
- Qt模块化笔记之Qt_Quick——用QQuickImageProvider给Image组件添加图片
- Qt模块化笔记之Qt_Quick——用QQuickImageProvider给Image组件添加图片
- Unity3D Image 组件附入图片问题
- Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android开源组件加载网络图片比较
- 在imageView依次添加7个手势, 1.点击哪个按钮,往imageView上添加哪个手势.(保证视图上只有一个手势). 2.轻拍:点击视图切换美女图片.(imageView上首先展示的美女
- background-image:url(data:image/gif;base64,XXXX) base64方式将本地图片添加到文档中
- iOS image 添加图片
- 通过s:graphicImageDynamic组件显示保存到数据库中的图片
- java.imageIo给图片添加水印的实现代码
- 每添加一张图片后,GDI对象 + 3 原因: ImageList_AddIcon(hIcon) 后没调用 DestroyIcon(hIcon)
- 【iOS开发】使用XCode 8添加Launch Image(启动图片)
- 【Android】图片切换组件ImageSwitcher的运用
- Android自定义ImageView实现在图片上添加图层效果
- 【iOS开发】使用XCode 8添加Launch Image(启动图片)
- flex image组件加载图片出错时显示默认图片
- 为image添加MouseEnter,MouseLeave,DownPicute多种状态图片
- ImageIcon & Image - 在组件上打印图片
- react-core-image-upload:轻量级的图片上传裁剪组件
- Android异步图片加载组件之 Universal_image_loader
- Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android开源组件加载网络图片比较