#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()
метод.