How to take ScreenShot Qt/QML

qml, qt

Solution

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);
}

Problem

QtQuick1 example 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.0 Rectangle{ id : root width : 1024 height : 768 MouseArea{ 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)

Original source

Related problems