我希望制作一个具有透明背景的QGLWidget,如上图所示 这是一个cpp代码,我不明白它的某些部分。据我所知,它使用窗口句柄,绘图上下文等。但我在C和C ++方面表现不佳。我使用过Python和PyQt,所以对我来说它似乎是一个亚特兰蒂斯。对于具有透明背景的QGLWidget有什么想法吗?
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QApplication, QColor
from PyQt4.QtOpenGL import QGLWidget
from OpenGL import GL
import sys
class TransGLWidget(QGLWidget):
def __init__(self, parent=None):
QGLWidget.__init__(self, parent)
self.setWindowFlags(Qt.FramelessWindowHint)
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.setGeometry(200, 100, 640, 480)
def initializeGL(self):
self.qglClearColor(QColor(0, 0, 0, 0))
def resizeGL(self, w, h):
GL.glViewport(0, 0, w, h)
GL.glMatrixMode(GL.GL_PROJECTION)
GL.glLoadIdentity()
x = float(w) / h
GL.glFrustum(-x, x, -1.0, 1.0, 1.0, 10.0)
GL.glMatrixMode(GL.GL_MODELVIEW)
GL.glLoadIdentity()
def paintGL(self):
GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT)
GL.glBegin(GL.GL_TRIANGLES)
GL.glColor3f(1.0, 0.0, 0.0)
GL.glVertex3f(-1.0, 1.0, -3.0)
GL.glColor3f(0.0, 1.0, 0.0)
GL.glVertex3f(1.0, 1.0, -3.0)
GL.glColor3f(0.0, 0.0, 1.0)
GL.glVertex3f(0.0, -1.0, -3.0)
GL.glEnd()
app = QApplication(sys.argv)
widget = TransGLWidget()
widget.show()
app.exec_()
我尝试使用上面的代码,但它没有显示任何内容。 (它似乎是一个完整透明的小部件。)如果我摆脱“setAttribute”,“setWindowFlags”,则会显示一个三角形。这段代码有没有错过?
答案 0 :(得分:1)
从this C++ solution翻译成Python。最后的分号已被删除,::
已替换为.
,True
已被大写。困难的主要来源是setAttribute
和setWindowFlags
实际上是QGLWidget
的方法,因此添加了self.
。只需在QGLWidget`的__init__()
构造函数中添加它即可。
self.setAttribute(Qt.WA_TranslucentBackground, True)
你可以添加 self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
如果您希望窗口位于其他窗口之上且没有框架。