QML보기의 스냅 샷을 디스크의 어딘가에 저장하려고합니다.QML보기의 스냅 샷 찍기
이것이 가능합니까?
calendar.grabToImage(function(result) { result.saveToFile("something.png") });
QML보기의 스냅 샷을 디스크의 어딘가에 저장하려고합니다.QML보기의 스냅 샷 찍기
이것이 가능합니까?
calendar.grabToImage(function(result) { result.saveToFile("something.png") });
예, 그것은 매우 쉽습니다 그것? 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
으로 직접 작업 할 수 있으므로 다른 개체 사이에서 "검색"할 필요가 없습니다.
여기서 중요한 부분은 당신의 QML보기의 내용이 아니라 어떻게로드 : 편의상
이보기를 가정하는 것은 일정
Calendar
{
id: calendar
anchors.fill: parent
}
답변 해 주셔서 감사합니다. 하지만 QQmlApplicationEngine을 사용하고 있기 때문에 내가 잡고 싶은 항목이 루트 항목이 아니라면 검색해야합니다. @dtech에서 제공하는 솔루션은 QML 내에서 모든 것을 처리 할 수 있기 때문에 더 훌륭합니다. –
나는 QML에서'grabImage()'할 수 있다는 것을 몰랐다. – rbaleksandar
QML의 Item::grabToImage()
또는 C++의 QQuickItem::grabToImage()
인 항목의 스냅 샷을 찍을 수 있습니다. 전체 창 스냅 샷을 찍기위한 QQuickWindow::grabImage()
도 있습니다.
완벽하게 작동합니다! 감사! –