0

我的代码如下所示:

QApplication app(argc, argv);
QQmlApplicationEngine app_engine;

app_engine.load("qml/main.qml");
return app.exec();

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

4

1 回答 1

1

我找到了将 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,这提供了更快的解决方案,但也存在一些问题。

于 2015-01-09T14:20:30.393 回答