【问题标题】:PyQt QGLWidget won't preserve aspect ratioPyQt QGLWidget 不会保留纵横比
【发布时间】:2016-03-20 06:02:25
【问题描述】:

我在布局 PyQt 窗口时遇到问题。我正在使用一个带有一个大 QGLWidget 和它下面的许多较小控件组件的网格布局。子类化 QGLWidget 时,我使用以下代码:

class GLWidget(QtOpenGL.QGLWidget):
    def __init__(self, parent=None):
        self.parent = parent
        QtOpenGL.QGLWidget.__init__(self, parent)
        sizePol=QSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Preferred)
        sizePol.setWidthForHeight(True)
        self.setSizePolicy(sizePol)

    def sizeHint(self):
        return QSize(300,450)

    def widthForHeight(self,height):
        return int(height/1.5)

我使用以下代码创建 lyout:

class MainWidget(QtGui.QWidget): 
    def __init__(self, parent = None):
        super(MainWidget, self).__init__(parent)    
        self.ogl_widget = GLWidget(self)
        grid = QtGui.QGridLayout()
        grid.setSizeConstraint(QtGui.QLayout.SetMinimumSize)
        grid.addWidget(self.ogl_widget, 0,0,1,6)
        #add other control components 
        <add LineEdits and Labels>
        <their size policy is vertical: fixed, horizontal: expanding>

但是,QGLWidget 的大小没有变化。它总是用产生的任意纵横比填充剩余空间。我必须添加/更改什么来解决此问题?

【问题讨论】:

    标签: python qt opengl pyqt pyopengl


    【解决方案1】:

    经过更多测试,我找到了解决方案:

    第一点是,widthForHeight 根本没有被调用,但heightForWidth 是,所以我改为实现heightForWidth 并设置sizePol.setHeightForWidth(True)

    第二点是,如果没有足够的空间,网格布局会覆盖首选高度。在我的用例中,我可以将 QGLWidget 放在 QScrollArea 中,并且纵横比是正确的。

    【讨论】:

      猜你喜欢
      • 2019-06-29
      • 2015-09-26
      • 2015-07-16
      • 2017-11-11
      • 2014-07-02
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多