2017-05-07 4 views
1

QML보기의 스냅 샷을 디스크의 어딘가에 저장하려고합니다.QML보기의 스냅 샷 찍기

이것이 가능합니까?

calendar.grabToImage(function(result) { result.saveToFile("something.png") }); 

답변

1

예, 그것은 매우 쉽습니다 그것? QQuickWindow (또는 유사한 클래스)을 사용합니까, 아니면 QQmlApplicationEngine을 사용합니까?

  • QQuickWindow/QQuickView 등 - 그것은
  • QQmlApplicationEngine을 포함 된 내용의 QImage를 반환 grabWindow() 기능을 가지고있다 - 당신이 QQuickWindow로 캐스팅 한 후 위와 같이 할 수있는 루트 개체를 찾을 필요가있다.

    QQmlApplicationEngine engine; 
    engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 
    // Usually the top level object is your window so you can 
    // omit the loop below and go straight for 
    // engine.rootObjects()[0] but it's still wise to check the 
    // result from the casting 
    
    foreach(QObject* obj, engine.rootObjects()) { 
        QQuickWindow* window = qobject_cast<QQuickWindow*>(obj); 
        if (window) { 
        QImage image = window->grabWindow(); 
        qDebug() << image; 
        } 
    } 
    

당신은 QImage 할 수 있습니다 convert it to QPixmap 얻을 파일로 저장하면.

보기가 있으니 Calendar으로 직접 작업 할 수 있으므로 다른 개체 사이에서 "검색"할 필요가 없습니다.

+0

완벽하게 작동합니다! 감사! –

1

여기서 중요한 부분은 당신의 QML보기의 내용이 아니라 어떻게로드 : 편의상

이보기를 가정하는 것은 일정

Calendar 
    { 
     id: calendar 
     anchors.fill: parent 
    } 
+0

답변 해 주셔서 감사합니다. 하지만 QQmlApplicationEngine을 사용하고 있기 때문에 내가 잡고 싶은 항목이 루트 항목이 아니라면 검색해야합니다. @dtech에서 제공하는 솔루션은 QML 내에서 모든 것을 처리 할 수 ​​있기 때문에 더 훌륭합니다. –

+0

나는 QML에서'grabImage()'할 수 있다는 것을 몰랐다. – rbaleksandar

관련 문제