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

时间:2014-12-18 15:24:15

标签: qt5 render off-screen

我的代码如下所示:

QApplication app(argc, argv);
QQmlApplicationEngine app_engine;

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

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

1 个答案:

答案 0 :(得分:1)

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

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

当app正在运行时,你可以抓住这样的窗口内容:

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

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

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