.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(); //截图全屏
同样的也可以截取部分图片