Как изменить QGLFormat для существующего QGLWidget во время выполнения? - PullRequest
6 голосов
/ 03 марта 2011

В моем приложении пользователь может изменять свойства формата OpenGL (то есть двойная буферизация, мультисэмплинг, глубина различных буферов, ...).

Пока в моем приложении есть только один QGLWidget, и если пользователь что-то меняет, я уничтожаю и воссоздаю виджет.

Теперь я хотел бы иметь более одного виджета. Поэтому, если формат меняется, мне нужно уничтожить / воссоздать все виджеты. Поскольку виджет может принимать различные конфигурации, его уничтожение / воссоздание их затруднено. Так есть ли способ изменить формат QGLWidget во время выполнения?

В качестве альтернативы, есть ли способ заменить виджет другим? (т.е. уничтожить виджет и поместить новый именно там, где он будет стоять)

1 Ответ

4 голосов
/ 03 марта 2011

Это может работать:

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

Редактировать: Вы также можете позвонить QGLWidget::setFormat напрямую, но устарело и может не всегда работать.Я думаю, что безопаснее воссоздать виджет.Вот как: Поместите свой виджет GL в подслой (любой вид - например, QVBoxLayout), который содержит только ваш виджет GL.Если вы хотите заменить его новым виджетом GL, удалите старый и вставьте новый виджет в этот подслой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...