当前位置 : 主页 > 手机开发 > 无线 >

qt – QGLWidget不会在滚动时移动其内容

来源:互联网 收集:自由互联 发布时间:2021-06-10
我正在使用 python中的Qt和PySide绑定.我的应用程序的主要部分是OpenGL视图,可以调整大小到特定值(这是一个模拟器,用于在移动设备的不同分辨率下测试我的游戏).我使用QGLWidget从我的游戏
我正在使用 python中的Qt和PySide绑定.我的应用程序的主要部分是OpenGL视图,可以调整大小到特定值(这是一个模拟器,用于在移动设备的不同分辨率下测试我的游戏).我使用QGLWidget从我的游戏引擎和QScrollArea渲染图形以进行滚动.

当我尝试滚动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

网友评论