如何在运行时更改现有QGLWidget的QGLFormat?

时间:2011-03-02 22:39:35

标签: c++ user-interface opengl dynamic qt4

在我的应用程序中,用户可能会更改OpenGL格式的属性(即双缓冲,多重采样,各种缓冲区的深度......)。

目前,我的应用程序中只有一个QGLWidget,如果用户更改了任何内容,我会销毁并重新创建小部件。

现在,我想拥有多个小部件。因此,如果格式改变,我需要销毁/重新创建所有小部件。由于小部件可以采用各种配置,因此很难破坏/重新创建它们。那么有没有办法在运行时更改QGLWidget的格式?

或者,有没有办法用另一个替换一个小部件? (即销毁一个小部件并将一个新小部件准确放置在它所用的位置)

1 个答案:

答案 0 :(得分:4)

这可能有效:

QGLFormat newFormat;
newFormat.setDoubleBuffer(true);
// ...
theGLWidget->context().setFormat(newFormat);

修改:您也可以直接致电QGLWidget::setFormat,但obsoletemay not always work。我认为重新创建小部件更安全。方法如下:将GL小部件放在子布局中(任何类型 - 例如QVBoxLayout),它只包含您的GL小部件。如果要将其替换为新的GL窗口小部件,请删除旧的窗口小部件,然后在该子布局中插入新的窗口小部件。