我的代码如下所示:
QApplication app(argc, argv);
QQmlApplicationEngine app_engine;
app_engine.load("qml/main.qml");
return app.exec();
有人可以帮我如何让 Qt 将所有内容渲染到我提供的缓冲区吗?必须避免使用 OpenGL。我可以使用 QWebPage 来完成这项工作,但这对我来说似乎要困难得多......
我的代码如下所示:
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,这提供了更快的解决方案,但也存在一些问题。