2014-01-07 101 views
4

我使用PySide綁定python的Qt。我的應用程序的主要部分是可以調整到特定值的OpenGL視圖(這是用於在不同移動設備分辨率下測試我的遊戲的模擬器)。我使用QGLWidget從我的遊戲引擎和QScrollArea渲染圖形進行滾動。QGLWidget不移動其滾動內容

當我試着滾動GL視圖什麼也沒有發生 - 它只是停留在同一個地方,但QGLWidget的座標更新很好,我通過打印語句看到了。

打開調整主窗口的大小我已經得出結論,QGLWidget中的所有內容都被捕捉到當前可見區域的左下角。所以這將解釋爲什麼我看不到滾動。

我應該手動更新投影矩陣嗎?

+0

所以你在'QScrollArea'裏面有'QGLWidget'?當您滾動時,您預期會發生什麼? – Fenikso

+0

我期望QGLWidget可以隨其所有圖紙一起移動。我可以通過縮放窗口來移動QGLWidget。 ScrollView對齊設置居中,QGLWidget保持居中在窗口中。但是我無法通過滾動來移動QGLWidget,所有的GL繪圖都被捕捉到QGLWidget的當前可見矩形的左下角。 – Vavius

回答

1

這聽起來像某種父母問題。這按預期工作:

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
+0

現在這聽起來像我的設置問題。我使用PySide 1.2.1,Qt 4.8.5,Mac OS X 10.8.5。你的三角形是固定的,不會隨着滾動條移動 – Vavius

+0

我在Windows 7上。庫版本看起來一樣,我明天可以檢查PyOpenGL版本。 – Fenikso

+1

也許這個問題與處理GLViews時的Cocoa限制有關。下面是Qt文檔中關於它的一行:「QGLWidget不能在它自己的頂部放置任何同級窗口小部件,這是由於Cocoa API的侷限性,並且Apple不支持。 – Vavius