Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt qgldon';不要在卷轴上移动它的内容_Qt_Scroll_Pyside_Qglwidget - Fatal编程技术网

Qt qgldon';不要在卷轴上移动它的内容

Qt qgldon';不要在卷轴上移动它的内容,qt,scroll,pyside,qglwidget,Qt,Scroll,Pyside,Qglwidget,我正在使用python中的Qt和PySide绑定。我的应用程序的主要部分是OpenGL视图,该视图可以调整为特定值(这是一个模拟器,用于在不同分辨率的移动设备上测试我的游戏)。我使用QGLWidget从游戏引擎渲染图形,并使用QScrollArea进行滚动 当我尝试滚动GL视图时,什么也没发生——它只是停留在同一个位置,但QGLWidget的坐标更新得很好,我可以通过打印语句看到 通过调整主窗口的大小,我得出结论,QGLWidget中的所有内容都被捕捉到当前可见区域的左下角。这就解释了为什么我看

我正在使用python中的Qt和PySide绑定。我的应用程序的主要部分是OpenGL视图,该视图可以调整为特定值(这是一个模拟器,用于在不同分辨率的移动设备上测试我的游戏)。我使用QGLWidget从游戏引擎渲染图形,并使用QScrollArea进行滚动

当我尝试滚动GL视图时,什么也没发生——它只是停留在同一个位置,但QGLWidget的坐标更新得很好,我可以通过打印语句看到

通过调整主窗口的大小,我得出结论,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

那么您有
QGLWidget
内部
qscrollara
?当你滚动时,你到底希望发生什么?我希望QGLWidget和它的所有图形一起移动。我可以通过缩放窗口来移动QGLWidget。ScrollView对齐设置为居中,QGLWidget在窗口中保持居中。但我不能通过滚动来移动QGLWidget,所有GL图形都被捕捉到QGLWidget当前可见矩形的左下角。现在听起来我的设置有问题。我使用的是PySide1.2.1、Qt4.8.5、MacOSX10.8.5。在Windows7上,三角形是固定的,不会随着滚动条移动。库版本看起来是一样的,我明天可以检查PyOpenGL版本。也许这个问题与处理glview时的Cocoa限制有关。Qt文档中有这样一句话:“QGLWidget不能将任何兄弟widget放在自己的桌面上。这是由于Cocoa API的限制,苹果不支持。”也许吧。我没办法告诉你。抱歉,在Java中使用Swing和JOGL来尝试同样的方法可能会很有趣。因为有
GLCanvas
GLJPanel
。第二种速度较慢,但与Swing GUI的兼容性更好。如果是操作系统的限制,我怀疑第一个会有同样的行为。