Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QOpenGLWidget能否与第三方OpenGL库集成?_C++_Qt_Opengl_Qt5_Sfml - Fatal编程技术网

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,您应该链接到特定的提交,而不是链接到将要更改的分支。