關於C++中獲取圖片傳遞給qml (Qt5.4)
阿新 • • 發佈:2019-02-03
.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(); //截圖全屏
同樣的也可以擷取部分圖片