Не удается встроить окно OpenGL в QWidget с помощью XReparentWindow

#qt #opengl #x11

#qt #opengl #x11

Вопрос:

Я пытаюсь добавить лучший пользовательский интерфейс для программы на основе OpenGL с помощью Qt. Поскольку я могу модифицировать эту программу, получить идентификатор окна нетрудно. Поэтому я думаю, что встраивание его в QWidget было бы хорошей идеей. Однако это работает не так, как я ожидал:

После XReparentWindow вызова окно OpenGL теряет свое оформление, но позиция не изменилась.

Если я использую XConfigureWindow его для перемещения в положение (0, 0) относительно родительского элемента, оно переходит в верхний левый угол экрана, но не в QWidget.

После перепрошивки третье окно может закрывать QWidget, но ничто не может закрывать окно OpenGL.

X11 не сообщал об ошибках в течение всей операции.

Похоже, родительский элемент окна OpenGL был установлен в корневое окно вместо моего QWidget. Что я должен сделать, чтобы оно работало правильно?

Ответ №1:

Вы можете заменить ваше текущее окно OpenGL QGLWidget, которое предоставляет контекст OpenGL и может быть помещено непосредственно в окно Qt.

Я не уверен, что Qt поддерживает XReparentWindow подобные вызовы. В документах, похоже, не говорится, что это так, поэтому, вероятно, использовать его — плохая идея. Вы могли бы попробовать QWidget::create() вместо этого.

Комментарии:

1. Спасибо. Это именно то, что я ищу. Я даже не знал, что есть такой create() метод.