我正在尝试让QtWebEngine在VM上运行并遇到困难。根据{{3}}的答案:
最终我意识到OpenGL 3.3在虚拟机上不会轻易工作..但是。我不得不从ubuntu usb启动并通过安装最新的mesa 3d包来工作。
有没有办法让QtWebEngine在没有OpenGL的情况下工作?我不是直接使用任何OpenGL调用,也不需要任何3d功能。我只想嵌入一个QWebEngineView
来显示动态HTML页面。我猜这应该是可行的,因为Chrome在同一个虚拟机上工作没有问题。
答案 0 :(得分:3)
我认为没有办法在没有OpenGL
的情况下使用Qt WebEngine。文档中没有明确说明,但这是我从我发现的内容中理解的内容。
据说here,QtWebEngine将铬的快速移动网络功能集成到Qt中。另外,Chromium允许通过Qt Quick场景图(source)操作OpenGL:
Chromium紧密集成到Qt Quick场景图中 基于OpenGL ES 2.0或OpenGL 2.0进行渲染。这提供了 您可以通过一次性合成Web内容和所有Qt Quick UI。 与Chromium的集成对于开发人员来说是透明的 使用Qt和JavaScript。
还有人说,渲染过程和GUI过程都应该共享一个OpenGL上下文:
因为渲染过程与GUI过程分开,所以它们 理想情况下应共享OpenGL上下文以使一个进程能够访问 另一方上传的资源,如图片或纹理。
我们刚刚谈到了Qt的GUI:实际上,Qt WebEngine并不依赖于这个GUI(页面呈现和JavaScript执行从GUI进程分离到Qt WebEngine进程),但请记住,如果你想要你的应用程序要工作,您需要在两个进程之间共享OpenGL上下文。特别是,默认情况下会使用QSurfaceFormat来实现此功能,QSurfaceFormat::profile()可以通过函数Qt WebEngine platform notes访问OpenGLContextProfile
。现在,我们回顾{{3}}所述的内容:
如果具有修改的OpenGL配置文件的新默认QSurfaceFormat必须 设置,应该在声明应用程序实例之前设置, 确保所有创建的OpenGL上下文都使用相同的OpenGL 轮廓。
在OS X上,如果在应用程序之后设置了默认的QSurfaceFormat 例如,应用程序将使用qFatal()退出,并打印一条消息 应该在应用程序之前设置默认的QSurfaceFormat 实例
如果我们查看Qt的源代码,可以在几个重要文件中调用OpenGL
,例如qtwebengine\src\core\web_engine_context.cpp
或qtwebengine\src\webengine\api\qtwebengineglobal.cpp
。此外,我还在OpenGL
中的来源中找到了对qtwebengine\src\3rdparty\chromium\
函数的调用,因此我怀疑Chromium有时需要调用OpenGL函数。
Qt WebEngine正在使用Chromium(不一定使用OpenGL)以及Qt GUI,它使用必须由Web引擎共享的OpenGL
上下文。因此,我的结论是,如果没有OpenGL,你就不能使用Qt WebEngine。