C++ QOpenGLWidget能否与第三方OpenGL库集成?
通过将C++ QOpenGLWidget能否与第三方OpenGL库集成?,c++,qt,opengl,qt5,sfml,C++,Qt,Opengl,Qt5,Sfml,通过将winId()结果传递到渲染库,可以将遗留的QGLWidget与渲染库(如SFML)集成。但是我不能让QOpenGLWidget那样工作。在使它成为MainWindow的中心小部件后,我得到了一系列警告,如QOpenGLWidget不能用作本机子小部件。考虑设置QT::AAYToNoToCeCaleTeNeWiDigigigig祖先和兄弟姐妹。< /代码>。此外,文档中说“另一方面,QGLWidget使用本机窗口和曲面。(…)QOpenGLWidget通过不创建单独的本机窗口来避免这种情况
winId()
结果传递到渲染库,可以将遗留的QGLWidget
与渲染库(如SFML)集成。但是我不能让QOpenGLWidget
那样工作。在使它成为MainWindow
的中心小部件后,我得到了一系列警告,如QOpenGLWidget不能用作本机子小部件。考虑设置QT::AAYToNoToCeCaleTeNeWiDigigigig祖先和兄弟姐妹。< /代码>。此外,文档中说“另一方面,QGLWidget使用本机窗口和曲面。(…)QOpenGLWidget通过不创建单独的本机窗口来避免这种情况。”。QOpenGLWidget
是否可以与第三方OpenGL软件集成,或者现在是否不支持它?您需要创建一个QWindow
,初始化它并与QWidget::createWindowContainer
集成到应用程序中
class MyNativeWindow : QWindow
{
MyNativeWindow() : QWindow
{
setSurfaceType(QWindow::OpenGLSurface);
}
};
MyNativeWindow *nativeW = new MyNativeWindow();
QWidget *w = QWidget::createWindowContainer( nativeW );
// Use w as a simple QWidget
在某些情况下,您不需要使用winId
来获取HWND
。了解OpenGL上下文id就足够了。对于自定义gl上下文操作,您可以使用QOpenGLContext
class
要小心,因为如果您的第三方库将自己创建本机窗口(在OSX中),那么Qt将有很多bug。我们致力于修复项目中的bug。(不可拆卸的底座、键盘焦点丢失、无法打开菜单、全屏显示错误等)
你可以看看这个。和自定义上下文。第二个链接(“自定义上下文代码示例”)不再有效。非常感谢代码示例,这将引导我走上正确的道路。在我的例子中,两个第三方查看器之间不断切换。其中一个是基于QOpenGLWidget的,而另一个只是利用小部件的winId()。我花了将近一天的时间反复尝试,找到了一种能够在它们之间切换并使用它们的功能的方法。我将MyNativeWindow
对象放入一个窗口容器中,如前所述,除了使用窗口的winId()
作为第三方查看器之外,我还必须相应地show()
和hide()
父窗口小部件('w')。@FranzB。它在重构过程中被删除。可以在3月28日获得source的提交。@DmitrySazonov,您应该链接到特定的提交,而不是链接到将要更改的分支。