Qglwidget transparente no topo do QGraphicsView
-
26-09-2019 - |
Pergunta
estou a usar QGraphicsView
para mostrar uma imagem 2D e também ter um separado QGLWidget
Janela para exibir algum objeto 3D. Estou alterando dinamicamente a imagem exibida em `qgraphicsView 'com base na rotação do objeto 3D.
Eu gostaria de renderizar um objeto 3D semi-transparente na parte superior da imagem 2D, algo como Maya 2009 costumava fazer (observe o cubo no canto superior direito da viewport):
(fonte: boulevard-creation.com)
É possível fazer isso com meus widgets atuais? Caso contrário, como isso poderia ser feito?
Uma opção em que posso pensar seria renderizar tudo em QGLWidget
e exiba a imagem 2D como uma textura em um plano de fundo, mas isso parece um pouco doloroso.
Solução
Eu encontrei um caminho, mas é bastante lento: você pode simplesmente adicionar outro QGraphicsItem
para o QGraphicsScene
assim
scene->addPixmap(glWidget->renderPixmap());
A transparência pode ser definida com QGraphicsItem::setOpacity()
.
Deve haver uma maneira mais rápida usando QPixelBuffer
, mas ainda não consegui renderizar isso corretamente.
Outras dicas
Defina a viewport do seu QGraphicsView como o QGLWidget e, no seu método de pintura, você pode usar diretamente as chamadas GL para desenhar seus objetos 3D.
Ver http://doc.qt.io/archives/qt-4.7/qpainter.html#beginnativePainting