如何在没有 QQuickView 的情况下截取 QML 应用程序的屏幕截图 [英] How to take Screenshot of QML application without QQuickView

查看:44
本文介绍了如何在没有 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 应用程序的屏幕截图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆