[Solved]How to take ScreenShot Qt/QML
-
"QtQuick1 example":http://www.developer.nokia.com/Community/Wiki/How_to_take_ScreenShot_Qt/QML
I can't make it work on QtQuick2
screenCapture.hpp
@
#include <QObject>class QString;
class QQuickView;class screenCapture : public QObject
{
Q_OBJECT
public:
explicit screenCapture(QQuickView *parent = 0);public slots:
void capture(QString const &path) const;private:
QQuickView *currentView_;
};
@screenCapture.cpp
@
#include <QPixmap>
#include <QQuickView>
#include <QString>#include "screenCapture.hpp"
screenCapture::screenCapture(QQuickView *currentView) :
QObject(0), currentView_(currentView)
{
}void screenCapture::capture(QString const &path) const
{
QPixmap::grabWidget(currentView_).save(path);
}
@main.cpp
@
#include <QGuiApplication>
#include <QQuickPaintedItem>
#include <QQuickView>
#include <QQmlContext>#include "screenCapture.hpp"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);qmlRegisterType<screenCapture>("Image", 1, 0, "ScreenCapture"); qmlRegisterType<saveAbleImage>("Image", 1, 0, "SaveAbleImage"); QQuickView view; view.setResizeMode(QQuickView::SizeRootObjectToView); view.setSource(QStringLiteral("/Users/Qt/program/experiment_apps_and_libs/funnyCamera/qml/funnyCamera/main.qml")); view.show(); screenCapture screenClass(&view); view.rootContext()->setContextProperty("screenObject", &screenClass); return app.exec();
}
@main.qml
@
import QtQuick 2.0Rectangle{
id : root
width : 1024
height : 768MouseArea{ anchors.fill: root onClicked: { console.log("save image") screenObject.capture("Pictures/saveTest.jpg") } }
}
@error message
QPixmap::grabWidget is deprecated, use QWidget::grab() instead
QMetaObject::invokeMethod: No such method QQuickView::grab(QRect) -
I found a solution, pretty simple, change the function "capture" to
@
void screenCapture::capture(QString const &path) const
{
QImage img = currentView_->grabWindow();
img.save(path);
}
@