拍摄 QML 视图的快照
Taking snapshot of a QML view
我想拍摄 QML 视图的快照并将其保存在磁盘上的某个位置。
这可能吗?
为简单起见,假设视图是日历
Calendar
{
id: calendar
anchors.fill: parent
}
是的,这很容易:
calendar.grabToImage(function(result) { result.saveToFile("something.png") });
这里重要的部分不是您的 QML 视图的内容,而是您如何加载它?您是使用 QQuickWindow
(或类似的 class)还是使用 QQmlApplicationEngine
来做到这一点?
QQuickWindow
/QQuickView
等 - 它具有 grabWindow()
功能,其中 returns 包含 的 QImage
QQmlApplicationEngine
- 您需要找到可以转换为 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
你可以直接使用它,而不需要 "search" 在其他对象中使用它。
可以对带有 Item::grabToImage()
from QML, or with QQuickItem::grabToImage()
from C++. There's also QQuickWindow::grabImage()
的项目进行快照,以便对整个 window 进行快照。
我想拍摄 QML 视图的快照并将其保存在磁盘上的某个位置。
这可能吗?
为简单起见,假设视图是日历
Calendar
{
id: calendar
anchors.fill: parent
}
是的,这很容易:
calendar.grabToImage(function(result) { result.saveToFile("something.png") });
这里重要的部分不是您的 QML 视图的内容,而是您如何加载它?您是使用 QQuickWindow
(或类似的 class)还是使用 QQmlApplicationEngine
来做到这一点?
QQuickWindow
/QQuickView
等 - 它具有grabWindow()
功能,其中 returns 包含 的 QQmlApplicationEngine
- 您需要找到可以转换为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
获得 QImage
后,您可以 convert it to QPixmap
并将其存储为文件。
既然你有你的视图 Calendar
你可以直接使用它,而不需要 "search" 在其他对象中使用它。
可以对带有 Item::grabToImage()
from QML, or with QQuickItem::grabToImage()
from C++. There's also QQuickWindow::grabImage()
的项目进行快照,以便对整个 window 进行快照。