How to take ScreenShot Qt/QML

匿名 (未验证) 提交于 2019-12-03 02:15:02

问题:

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)

回答1:

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


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!