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

发布于 2024-10-20 04:18:57 字数 285 浏览 1 评论 0原文

在我的应用程序中,用户可以更改 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

少跟Wǒ拽 2024-10-27 04:18:57

这可能有效:

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

编辑:您也可以直接调用QGLWidget::setFormat,但它是已过时可能并不总是有效。我认为重新创建小部件更安全。方法如下:将您的 GL 小部件放入子布局(任何类型 - 例如 QVBoxLayout)中,该子布局仅包含您的 GL 小部件。当您想用新的 GL 小部件替换它时,请删除旧的小部件,然后将新小部件插入该子布局中。

This may work:

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文