我想实现一个自定义的OpenGL场景(包装在一个QGLWidget),但仍然使用QT控件(如滑动条和按钮)。我试图让我的主窗口小部件成为一个QGLWidget,它有QWidgets作为孩子。子窗口小部件似乎工作(当我点击一个下拉菜单,它的选项出现),但小部件无法绘制(我看到一个白色的正方形)。我将我的子窗口小部件的基类从QWidget更改为QGLWidget,现在QPainter调用工作,但是QT GUI的东西仍然不显示...QGLWidget图形和QT的GUI
某些人声称QGLWidget不能将QWidgets作为儿童使用... I我不确定,我不愿意放弃。顺便说一句,我使用可视化库来绘制OpenGL场景,但它只是一个OpenGL包装...
任何线索的问题可能是什么?此外,当我将子小部件添加到GQLWidget时,关键事件因某种原因而停止处理。我试过各种组件和布局的组合。看起来QGLWidget只是在任何东西上绘制而成。我甚至尝试用raise()来安排小部件的Z深度,但没有用。 overlayGL()是在OpenGL小部件顶部绘制的唯一方法吗?
更新2 经过数月的尝试,我发现它与QT有关。每当QGLWidget绘制在另一个QGLWidget的顶部时,第一个的background()函数就不会被调用。所以一个按钮在那里,可以点击,但它没有绘制。我的解决方法是使用QPainter自己绘制所有东西 - 这很有效。我发现好奇的是,必须使用QPainter :: startNativePainting()才能绘制它。人们会认为当QPainter是绘画设备时,它们会重载QPainter中的start()以调用startNativePainting()...
另一个(也许有用的)事实是QPainter调用了更改Opengl上下文。所以如果你有与QPainter合作的另一种工具(在我的例子中是Visualization Library),它们中的一个会崩溃(在我的例子中,VL检查上下文状态是否在每帧之前被清除)。
您是否可以创建一个非GL窗口小部件作为主窗口,以及一个GL窗口小部件,因为它是子窗口?因此,您窗口中需要的其他控件将是GL窗口的兄弟和表兄弟,而不是儿童。 – 2011-12-30 01:17:56
我首先尝试过 - 它无法抱怨某些GL_SRC_ALPHA问题。 QGLWidget由VL [link](http://www.visualizationlibrary.org/)构建,非常复杂,因此很难调试... – 2011-12-30 03:11:16
您是否试图让QWidget派生对象漂浮在QGLWidget的顶部? – cmannett85 2011-12-30 10:10:30