本文介绍了如何在没有 QQuickView 的情况下截取 QML 应用程序的屏幕截图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想抓取我的 QML 应用程序的屏幕.但是我的根 QML 对象是 ApplicationWindow
,所以我不能使用 QQuickView
来显示它.相反,我必须使用 QQmlApplicationEngine
.我知道如何使用 QQuickView
(QQuickWindow::grabWindow
) 截屏,但不知道如何使用 QQmlApplicationEngine
截屏.p>
我的 main
文件:
int main(int argc, char *argv[]){QApplication 应用程序(argc,argv);应用程序数据应用程序数据;QQmlApplicationEngine 引擎;engine.load(QUrl("qrc:///main.qml"));返回 app.exec();}
main.qml
:
导入QtQuick 2.1导入 QtQuick.Controls 1.1导入 QtQuick.Window 2.1应用程序窗口 {id:主窗口宽度:appData.screenWidth高度:appData.screenHeight可见:真长方形 {id: 主窗口背景红色"anchors.fill:父级}//...}
解决方案
您可以使用 rootObjects()
并将其结果转换为 QQuickWindow
:
foreach(QObject* obj, engine.rootObjects()) {QQuickWindow* window = qobject_cast(obj);如果(窗口){QImage image = window->grabWindow();qDebug() <<图片;}}
I want to grab screen of my QML application. But my root QML object is ApplicationWindow
, so I can't use QQuickView
to show it. Instead I have to use QQmlApplicationEngine
.I know how to take screenshot with QQuickView
(QQuickWindow::grabWindow
), but don't know how to take it with QQmlApplicationEngine
.
My main
file:
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
}
//...
}
解决方案
You can use rootObjects()
and cast its result to QQuickWindow
:
foreach(QObject* obj, engine.rootObjects()) {
QQuickWindow* window = qobject_cast<QQuickWindow*>(obj);
if (window) {
QImage image = window->grabWindow();
qDebug() << image;
}
}
这篇关于如何在没有 QQuickView 的情况下截取 QML 应用程序的屏幕截图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!