QOpenGLWidget可以与第三方OpenGL库集成吗?

时间:2015-03-27 19:16:33

标签: c++ qt opengl qt5 sfml

通过将QGLWidget结果传递给渲染库,可以将遗留winId()与渲染库(如SFML)集成。但我不能让QOpenGLWidget以这种方式工作。在制作MainWindow的中央窗口小部件后,我会收到一系列警告,例如QOpenGLWidget cannot be used as a native child widget. Consider setting Qt::AA_DontCreateNativeWidgetAncestors and Siblings.。此外,文档说“另一方面,QGLWidget使用本机窗口和表面。(...)QOpenGLWidget通过不创建单独的本机窗口来避免这种情况。” QOpenGLWidget可以与第三方OpenGL软件集成,还是现在不支持?

1 个答案:

答案 0 :(得分:3)

您需要创建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类。

要小心,因为如果你的第三方库会自己创建本机窗口(在OS X中),那么Qt会有很多错误。我们与修复项目中的错误有关。 (无法移动的底座,键盘焦点丢失,无法打开菜单,全屏错误等。)

您可以查看此code sample。以及自定义上下文code sample