如何在运行时更改现有 QGLWidget 的 QGLFormat?
在我的应用程序中,用户可以更改 OpenGL 格式的属性(即双缓冲、多重采样、各种缓冲区的深度……)。
目前,我的应用程序中只有一个 QGLWidget,如果用户更改任何内容,我会销毁并重新创建该小部件。
现在,我想要拥有多个小部件。因此,如果格式发生变化,我需要销毁/重新创建所有小部件。由于小部件可以采用各种配置,因此销毁/重新创建它们很困难。那么有没有办法在运行时改变 QGLWidget 的格式呢?
或者,有没有办法用另一个小部件替换一个小部件? (即销毁一个小部件并在其原来所在的位置放置一个新的)
In my application, the user may change the properties of the OpenGL format (i.e. double buffering, multisampling, depth of various buffers, ...).
For now, there is only one QGLWidget in my application, and if the user changes anything, I destroy and recreate the widget.
Now, I would like to have more than one widget. So if the format change, I need to destroy/recreate all the widgets. As the widget can assume various configurations, it destroying/recreating them is difficult. So is there a way to change the format of a QGLWidget at runtime?
Alternatively, is there a way to replace a widget by another one? (i.e. destroy a widget and place a new one exactly where it use to stand)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这可能有效:
编辑:您也可以直接调用
QGLWidget::setFormat
,但它是已过时 和 可能并不总是有效。我认为重新创建小部件更安全。方法如下:将您的 GL 小部件放入子布局(任何类型 - 例如 QVBoxLayout)中,该子布局仅包含您的 GL 小部件。当您想用新的 GL 小部件替换它时,请删除旧的小部件,然后将新小部件插入该子布局中。This may work:
Edit: You can also call
QGLWidget::setFormat
directly, but it's obsolete and may not always work. I think it's safer to recreate the widget. Here's how: Put your GL widget in a sublayout (any kind - e.g. QVBoxLayout) that contains nothing but your GL widget. When you want to replace it with a new GL widget, delete the old one, and insert your new widget in that sublayout.