2014-02-11 6 views
7

QML 응용 프로그램의 화면을 잡고 싶습니다. 하지만 내 루트 QML 개체는 ApplicationWindow이므로 QQuickView을 사용하여 표시 할 수 없습니다. 대신 QQmlApplicationEngine을 사용해야합니다. QQuickView (QQuickWindow::grabWindow)으로 스크린 샷을 찍는 방법을 알고 있지만 QQmlApplicationEngine으로 촬영하는 방법을 모르겠습니다.QQuickView없이 QML 응용 프로그램의 스크린 샷

main 파일 :

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    ApplicationData appData; 
    QQmlApplicationEngine engine; 
    engine.load(QUrl("qrc:///main.qml")); 
    return app.exec(); 
} 

main.qml :

import QtQuick 2.1 
import QtQuick.Controls 1.1 
import QtQuick.Window 2.1 


ApplicationWindow { 
    id: mainWindow 
    width: appData.screenWidth 
    height: appData.screenHeight 
    visible: true 

    Rectangle { 
     id: mainWindowBackground 
     color: "red" 
     anchors.fill: parent 
    } 

    //... 
} 

답변

5

당신은 rootObjects()을 사용하고 QQuickWindow에 그 결과를 캐스팅 할 수 있습니다

foreach(QObject* obj, engine.rootObjects()) { 
    QQuickWindow* window = qobject_cast<QQuickWindow*>(obj); 
    if (window) { 
    QImage image = window->grabWindow(); 
    qDebug() << image; 
    } 
} 
0

당신은 캐스트 할 수 ApplicationWindow (QML)에 QQuickWindow (C++). 그렇다면 스크린 샷을 찍는 것이 쉽습니다.

void ScreenShot(QQuickWindow *widget) { 
    QPixmap pixmap = QPixmap::fromImage(widget->grabWindow()); 
    QFile f("your_name.png"); 
    f.open(QIODevice::WriteOnly); 
    if(f.isOpen()) { 
     pixmap.save(&f, "PNG"); 
    } 
관련 문제