我正在使用 python中的Qt和PySide绑定.我的应用程序的主要部分是OpenGL视图,可以调整大小到特定值(这是一个模拟器,用于在移动设备的不同分辨率下测试我的游戏).我使用QGLWidget从我的游戏
当我尝试滚动GL视图时没有任何反应 – 它只是停留在同一个地方,但QGLWidget的坐标更新很好,我通过print语句看到.
通过调整主窗口的大小,我得出结论,QGLWidget内的所有内容都被捕捉到当前可见区域的左下角.所以这可以解释为什么我看不到滚动.
我应该手动更新投影矩阵吗?
这听起来像某种育儿问题.这按预期工作:import sys from PySide.QtGui import * from PySide.QtOpenGL import * from OpenGL.GL import * from OpenGL.GLU import * class GLWidget(QGLWidget): def __init__(self, *args, **kwargs): QGLWidget.__init__(self, *args, **kwargs) def initializeGL(self): glShadeModel(GL_SMOOTH) glEnable(GL_DEPTH_TEST) glClearColor(0.0, 0.0, 0.0, 1.0) glClearDepth(1.0) def resizeGL(self, w, h): glMatrixMode(GL_PROJECTION) glLoadIdentity() glViewport(0, 0, w, h) gluPerspective(45.0, w / h, 1, 1000) def paintGL(self): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glTranslatef(0.0, 0.0, -6.0) glBegin(GL_TRIANGLES) glColor3f(1.0, 0.0, 0.0) glVertex3f(0.0, 1.0, 0.0) glColor3f(0.0, 0.0, 1.0) glVertex3f(-1.0, -1.0, 0.0) glColor3f(0.0, 1.0, 0.0) glVertex3f(1.0, -1.0, 1.0) glEnd() class Window(QWidget): def __init__(self, *args, **kwargs): QWidget.__init__(self, *args, **kwargs) self.scroll = QScrollArea(self) self.glWidget = GLWidget(self.scroll) self.glWidget.resize(600, 400) self.scroll.setWidget(self.glWidget) self.layout = QHBoxLayout() self.layout.addWidget(self.scroll) self.setLayout(self.layout) self.resize(400, 300) self.show() app = QApplication(sys.argv) win = Window() sys.exit(app.exec_())
>操作系统:Windows 7 SP1(32位)> PySide:1.2.1> Qt:4.8.5> PyOpenGL:3.0.2