Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Не вызывается initializeGL()


Автор: OlegIT 29.8.2018, 14:42
Qt, OpenGl. Есть дочернее, к главному окну, окно (QWidget), внутри него есть окна, наследованные от QOpenGLWidget (подвижное окно с кнопками на которых отображаются 3D объекты). При такой конструкции метод initializeGL() не вызывается. Если окно, наследованное от QOpenGLWidget, «привязано» к главному окну, то всё работает. Как исправить эту ситуацию?

Автор: Alexeis 10.9.2018, 15:16
Нужно понимать как устроен OpenGL в Windows. Контекст OpenGL привязывается к дескриптору окна. В Qt окна имеют только top level виджеты (обычно), но есть возможность создать Windows окно для любого виджета. 

Цитата

WId QWidget::winId() const
Returns the window system identifier of the widget.
Portable in principle, but if you use it you are probably about to do something non-portable. Be careful.
If a widget is non-native (alien) and winId() is invoked on it, that widget will be provided a native handle.


Скажу честно, не проверял, но знаю что такой способ позволяет инициализировать DirectX окошко, ну и создать контекст OpenGL руками также возможно. 

Автор: OlegIT 19.9.2018, 15:48
Выкрутился, но это не совсем грамотно, "привязал" окна с QOpenGLWidget к главному окну и соответствующим образом управляю их позициями. Кстати, это решение перекрывает http://forum.vingrad.ru/forum/topic-393189.html мой вопрос

Автор: Alexeis 19.9.2018, 16:53
Цитата

Native Widgets vs Alien Widgets
Introduced in Qt 4.4, alien widgets are widgets unknown to the windowing system. They do not have a native window handle associated with them. This feature significantly speeds up widget painting, resizing, and removes flicker.

И в данном случае предлагается следующее решение
Цитата

Set the Qt::WA_NativeWindow attribute on widgets: The widget itself and all of its ancestors will become native (unless Qt::WA_DontCreateNativeAncestors is set).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)