我正在尝试使用QGraphicsView/QGraphicsScene类,QGLWidget可以完成大部分渲染(稍后我需要硬件加速(。我的 QGraphicsView(s( 平铺在 QGridLayout 中,本身位于 QDockWidget 派生窗口中。我似乎无法让事件涓涓细流到 QGLWidget。我不认为这是布局架构,因为当我将QGLWidget派生对象直接放在QGridLayout"tiles"中时,事件会传递给OpenGL类。它的QGraphicsView ->QGLWidget通信不起作用。
QDocWidget 中启动它们的代码片段:
...
self.lightBoxes = []
for row in range ( numRows ):
for col in range ( numCols ):
#view = myImageView() this wont see the GL renderer, why ?
view = myGLView()
self.gridLayout.addWidget (view, row, col )
self.lightBoxes.append ( view )
QGLWidget和QGraphicsView派生类在这里。同样,事件将到达任一对象,但不会在它们之间(QGraphicsView 和 QGLWidget(
class myGLView ( QtOpenGL.QGLWidget):
def __init__(self, parent=None, GLFlags=0 ):
print "MyGLView.__init__"
QtOpenGL.QGLWidget.__init__( self, parent )
def initializeGL(self):
print "myGLView.initializeGL"
# ...
def resizeGL (self, width=0, height=0):
print "myGLView.resizeGL"
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(40.0, 1.0, 1.0, 30.0)
#...
def paintGL (self):
print "myGLView.paintGL"
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
# ....
# ...resize Events wont trickle down from here...
class myImageView( QtGui.QGraphicsView ):
def __init__(self, parent=None, origPixmap=None ):
print "myImageView.__init__"
QtGui.QGraphicsView.__init__( self, parent )
QtCore.QMetaObject.connectSlotsByName(self)
self.GLRenderer = myGLView( self )
self.graphicsScene = QtGui.QGraphicsScene()
self.setViewport ( self.GLRenderer )
self.setScene ( self.graphicsScene )
def resizeEvent(self, event):
print "myImageView.resizeEvent"
QtGui.QGraphicsView.resizeEvent( self, event )
我的调用序列一定很糟糕,我没有看到任何事件(这里是 resizeEvent(进入 pyOpenGL 类。我以为我遵循了文档中的示例代码。知道我怎么能工作吗?
感谢
也许你需要用它的父级(即self(调用myGLView。
view = myGLView(self)
事件被传播。