2013-06-13 22 views
5
Ben QtQuick2 üzerinde

ScreenShot Qt/QML almaya nasıl

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

iş yapamazsınız QtQuick1 example

#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") 
     } 
    } 
} 

hata iletisi

QPixmap :: grabWidget kullanımdan kaldırılmıştır, QWidget :: kepçe() yerine QMetaObject :: invokeMethod kullanımı: Böyle bir yöntem, QQuickView :: kepçe (QRect)

+0

fonksiyonu “yakalama” değiştirin: http://stackoverflow.com/questio ns/17146747/yakalama QML-çekme tampon olmadan sergileyen – Dmitry

cevap

6

buldum bir çözüm oldukça basit, bu örneği kullanabilirsiniz Qt5 QML Quick2 için

void screenCapture::capture(QString const &path) const 
{ 
    QImage img = currentView_->grabWindow(); 
    img.save(path); 
} 
İlgili konular