1. 程式人生 > >關於C++中獲取圖片傳遞給qml (Qt5.4)

關於C++中獲取圖片傳遞給qml (Qt5.4)

.h

#ifndef MYIMAGEPROVIDER_H
#define MYIMAGEPROVIDER_H

#include <QQuickImageProvider>
#include <QQuickWindow>
#include <QImage>

class MyImageProvider : public QQuickImageProvider
{
public:
    explicit MyImageProvider(QQuickWindow *window = 0);

    QImage requestImage(const QString &id, QSize *size, const
QSize &requestedSize); signals: public slots: private: QQuickWindow *m_window; }; #endif // MYIMAGEPROVIDER_H

.cpp

#include "myimageprovider.h"

MyImageProvider::MyImageProvider(QQuickWindow *window)
    : QQuickImageProvider(QQuickImageProvider::Image)
{
    m_window = window;
}


QImage MyImageProvider::requestImage
(const QString &id, QSize *size, const QSize &requestedSize) { if(m_window == NULL) { return QImage(); } QImage image = m_window->grabWindow(); //截圖全屏 if(requestedSize.isValid()) { return image.scaled(requestedSize); } return image; }

main.cpp中新增如下程式碼:

QQuickView *viewer;
int main()
{
    ....
    viewer = new QQuickView();
    viewer->engine()->addImageProvider("windowScreen",new myImageProvider(viewer));  //設定圖片的位置
}

.qml

I
mage{
    source:"image://windowScreen/screenImage";
    }

requestImage()生成圖片,可在C++中使用或者qml中使用,
QImage image = m_window->grabWindow(); //截圖全屏
同樣的也可以擷取部分圖片