Прозрачный QGLWidget поверх QGraphicsView - PullRequest
2 голосов
/ 06 января 2011

Я использую QGraphicsView, чтобы показать 2D-изображение, а также у меня есть отдельное окно QGLWidget для отображения какого-либо 3D-объекта.Я динамически изменяю изображение, отображаемое в QGraphicsView, на основе поворота 3D-объекта.

Я хотел бы визуализировать полупрозрачный 3D-объект поверх 2D-изображения, что-то вроде Maya 2009 использовалосьсделать (обратите внимание на куб в верхнем правом углу окна просмотра): Скриншот Maya 2009 http://www.boulevard -creation.com / images / 2008/11 / maya2009png.png

Этоможно сделать это с моими текущими виджетами?Если нет, то как это можно сделать?

Один из вариантов, который я могу придумать, состоит в том, чтобы визуализировать все в QGLWidget и отображать 2D-изображение в качестве текстуры на плоскости фона, но это кажется немного болезненным.

Ответы [ 2 ]

2 голосов
/ 06 января 2011

Я нашел способ, но он довольно медленный: вы можете просто добавить еще один QGraphicsItem к QGraphicsScene, как этоscene->addPixmap(glWidget->renderPixmap());

Прозрачность может быть установлена ​​с помощью QGraphicsItem::setOpacity().

Должен быть более быстрый способ использования QPixelBuffer, но мне пока не удалось правильно отобразить его.

1 голос
/ 07 января 2011

Установите область просмотра вашего qgraphicsview на qglwidget, затем в вашем методе рисования вы можете напрямую использовать вызовы gl для рисования ваших 3d-объектов.

См. http://doc.qt.io/archives/qt-4.7/qpainter.html#beginNativePainting

...