Вырезать QGLWidget? - PullRequest
       14

Вырезать QGLWidget?

0 голосов
/ 23 августа 2011

Можно ли вырезать QGLWidget? Я имею в виду, я хотел бы сократить его, чтобы я получил доступ к графическому интерфейсу ниже. Это звучит странно, но для меня было бы много работы, чтобы разделить мой QGLWidget на две части. Я надеюсь, вы понимаете, о чем я. Спасибо

1 Ответ

5 голосов
/ 23 августа 2011

Я не совсем понимаю, что вы подразумеваете под "вырезать" и графический интерфейс ниже.В Qt с правильно используемыми механизмами компоновки виджет потребляет область, которую он покрывает, и под ним нет виджетов.

Хотите ли вы отобразить несколько представлений в один QGLWidget?Это легко достигается при правильном использовании glViewport + glScissor .


РЕДАКТИРОВАТЬ из-за комментария

ТамЕсть два вида окон:

  • Верхний уровень (те, которые вы можете свободно перемещать по экрану)
  • Дочерние окна (подокна, такие как виджеты или панели в окне верхнего уровня)

Дочерние окна снова имеют две характеристики:

  • логический дочерний элемент
  • реальный дочерний элемент

Логическое дочернее окно состоит только изего положение, размер и слой и управляются инструментарием.С точки зрения операционной системы есть только одно окно верхнего уровня.Это набор инструментов, который управляет своим внутренним состоянием, создавая впечатление независимых окон-братьев в окне верхнего уровня.

Реальным дочерним окном управляет операционная / графическая система.Такие реальные дочерние окна могут делиться своим графическим контекстом со своими родителями и братьями и сестрами.Однако OpenGL хорошо работает, только если окно, в котором создается контекст OpenGL, имеет свой собственный графический контекст.Таким образом, любое дочернее окно OpenGL неизбежно будет иметь свой собственный графический контекст и объект окна графической системы.Большинство графических систем там не поддерживают должным образом применение фигур к дочерним окнам (только окна верхнего уровня, и это также конфликтует с OpenGL).

Таким образом, все сводится к тому, что практически невозможно или нежелательно пытаться"слой" окна OpenGL поверх родного брата.В некоторых случаях это может сработать, но в большинстве случаев это не сработает.

Это плохие новости.

Хорошие новости заключаются в том, что вы просто смотрели в несколько неверном направлении.Настоящим я направляю ваш взгляд на QGraphicsView .QGraphicsView поддерживает OpenGL в качестве бэкэнда, вы также можете написать свой собственный код рендеринга OpenGL, который будет выполняться в QGraphicsView.Но, кроме того, QGraphicsView также можно использовать для рендеринга виджетов, также используя OpenGL.Поэтому все, что вам нужно сделать, это поместить код рендеринга OpenGL и ваш виджет в общую сцену QGraphicsView, и все готово.А вот урок http://www.crossplatform.ru/node/612 результат урока выглядит так: enter image description here

...