Qt:将 QML 窗口渲染到缓冲区



我的代码如下所示:

QApplication app(argc, argv);
QQmlApplicationEngine app_engine;
app_engine.load("qml/main.qml");
return app.exec();

有人可以帮我如何使Qt将所有内容渲染到我提供的缓冲区吗?必须避免OpenGL。我可以用 QWebPage 完成这项工作,但这对我来说似乎要困难得多......

我已经找到了将 QML 输出作为 QImage 获取的方法,但它仅在 QML 窗口具有焦点时才有效。不完整的代码片段如下:

QApplication app(argc, argv);
QQmalApplicationEngine *appEngine = new QQmlApplicationEngine(this);
appEngine->load(script_path);
...
app.exec();

在应用程序运行时,您可以像这样获取窗口内容:

QQuickWindow *win = qobject_cast<QQuickWindow *>(appEngine->rootObjects().first());
QImage grabbed = win->grabWindow();

它有几个缺点(即当输入焦点丢失时光标消失,grabWindow(( 非常慢等(。

此外,还可以将QML页面渲染重定向到自定义FBO,这提供了更快的解决方案,但也遇到了一些问题。

相关内容

  • 没有找到相关文章

最新更新