我的代码如下所示:
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,这提供了更快的解决方案,但也遇到了一些问题。