QGLWidget الشفافة على رأس QGraphicsView
-
26-09-2019 - |
سؤال
أنا استخدم QGraphicsView
لإظهار صورة ثنائية الأبعاد وأيضًا الحصول على منفصلة QGLWidget
نافذة لعرض بعض الكائنات ثلاثية الأبعاد. أقوم بتغيير الصورة المعروضة بشكل ديناميكي في "QGraphicsView" بناءً على دوران الكائن ثلاثي الأبعاد.
أرغب في تقديم كائن ثلاثي الأبعاد شبه شفاف أعلى الصورة ثنائية الأبعاد ، وهو شيء مثل Maya 2009 المستخدم (لاحظ المكعب في الزاوية اليمنى العليا من منفذ العرض):
(مصدر: Boulevard- Creation.com)
هل من الممكن القيام بذلك باستخدام عناصر واجهة المستخدم الحالية؟ إذا لم يكن كذلك ، كيف يمكن أن يتم ذلك؟
خيار واحد يمكنني التفكير فيه هو جعل كل شيء فيه QGLWidget
وعرض الصورة ثنائية الأبعاد كملمس على مستوى الخلفية ، ولكن هذا يبدو مؤلمًا بعض الشيء.
المحلول
لقد وجدت طريقة ، لكنها بطيئة جدًا: يمكنك ببساطة إضافة طريقة أخرى QGraphicsItem
إلى QGraphicsScene
مثله
scene->addPixmap(glWidget->renderPixmap());
يمكن أن يتم ضبط الشفافية مع QGraphicsItem::setOpacity()
.
يجب أن يكون هناك طريقة أسرع باستخدام QPixelBuffer
, ، لكنني لم أتمكن من تقديمها بشكل صحيح حتى الآن.
نصائح أخرى
قم بتعيين منفذ عرض QGraphicsView الخاص بك على QGLWidget ، ثم في طريقة الطلاء الخاصة بك ، يمكنك استخدام مكالمات GL مباشرة لرسم كائنات ثلاثية الأبعاد الخاصة بك.
يرى http://doc.qt.io/archives/qt-4.7/qpainter.html#beginnativePainting