Qt模块化笔记之Qt_Quick——用QQuickImageProvider给Image组件添加图片

来源:互联网 发布:java selenim设置超时 编辑:程序博客网 时间:2024/05/19 22:05


本节最终解决为qml文件中的Image元素提供QImage类型的图片。利用到的类即QQuickImageProvider

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

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. Image {  
  2.     id: screenImg  
  3. }  
  4. Connections {  
  5.         target: client  // 目标对象  
  6.         onCallQmlRefeshImg: {//连接自定义类Client来的信号,表示要刷新图片  
  7.             screenImg.source=""//更新图片  
  8.             screenImg.source= "image://screen"//image:必须  
  9.         }  

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

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. int main(int argc, char *argv[])  
  2. {  
  3.     QGuiApplication app(argc, argv);  
  4.     Client *client=new Client;  
  5.     QtQuick2ApplicationViewer viewer;  
  6.     viewer.engine()->rootContext()->setContextProperty("client", client);  // 将新的类映射为QML的一个对象,c++交互  
  7.     viewer.engine()->addImageProvider(QLatin1String("screen"), client->imgProvider);//这句一个要在下一句之前,为引擎添加图片提供  
  8.     viewer.setMainQmlFile(QStringLiteral("qml/remoteContralClient/main.qml"));  
  9.     viewer.showExpanded();  
  10.     return app.exec();  
  11. }  

screenImageProvider.h图片提供类:

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. #ifndef SCREENIMAGEPROVIDER_H  
  2. #define SCREENIMAGEPROVIDER_H  
  3. #include <QQuickImageProvider>  
  4. #include <QImage>  
  5. #include <QSize>  
  6. #include <QColor>  
  7. class ScreenImageProvider : public QQuickImageProvider  
  8. {  
  9. public:  
  10.     ScreenImageProvider()  
  11.         : QQuickImageProvider(QQuickImageProvider::Image)  
  12.     {  
  13.     }  
  14.   
  15.     QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize)//这个是自动调用的。路径"image://screen",如需要使用id等参数,如"image://screen/id"等  
  16.     {  
  17.         return this->img;  
  18.     }  
  19.     QImage img;  
  20. };  
  21. #endif // SCREENIMAGEPROVIDER_H  
在Client中为ScreenImageProvider 中的img添加图片

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. class Client : public QObject  
  2. {  
  3.     Q_OBJECT  
  4. public:  
  5.     explicit Client(QObject *parent = 0);  
  6.     ScreenImageProvider *imgProvider;  
  7. signals:  
  8.     void callQmlRefeshImg();  
  9. private:  
  10.     QImage img;  
  11. }  
Client实现部分某地方:
[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. QByteArray a;  
  2. in>>a;//in是一个datastream,从网络中获取了图片。  
  3. img.QImage::loadFromData(a);  
  4. imgProvider->img=img;//将图片传输给imgProvider类的img  
  5. emit callQmlRefeshImg();//告诉qml要刷新图片  

除可以提供QImage外,同理。还可以是QPixmap

1 0
原创粉丝点击