大小更改后的GridLayout + ScrollArea小部件位置

时间:2012-07-08 21:02:48

标签: pyqt pyqt4 qscrollarea qgridlayout

我有一个带有gridlayout的scrollArea,我用图像添加QLabel。当应用程序启动时,它工作正常并正确显示标签:

when starting 注意:我计算当前布局空间中适合的标签数量。

如果我最大化它也可以正常工作: when i maximize

但是当我点击恢复时会发生奇怪的事情: after restore

您可以看到只添加了6个标签(与第一个屏幕截图相同)但在这里它们都相互重叠。

这是ScrollArea和Layout的初始化代码:

self.scrollArea = QtGui.QScrollArea(self.centralwidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth())
self.scrollArea.setSizePolicy(sizePolicy)
self.scrollArea.setAutoFillBackground(True)
self.scrollArea.setStyleSheet(_fromUtf8("border: 1px solid blue"))
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName(_fromUtf8("scrollArea"))
self.gridLayoutWidget = QtGui.QWidget()
self.gridLayoutWidget.setGeometry(QtCore.QRect(0, 0, 667, 551))
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.gridLayoutWidget.sizePolicy().hasHeightForWidth())
self.gridLayoutWidget.setSizePolicy(sizePolicy)
self.gridLayoutWidget.setLayoutDirection(QtCore.Qt.LeftToRight)
self.gridLayoutWidget.setAutoFillBackground(True)
self.gridLayoutWidget.setStyleSheet(_fromUtf8("border: 1px solid red"))
self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
self.scrollArea.setWidget(self.gridLayoutWidget)

1 个答案:

答案 0 :(得分:0)

感谢freenode上的#pyqt(向Avaris大喊)我现在知道问题所在。这似乎是QGridLayout中的一个错误。

当我们最大化窗口时,QGridLayout以12列结束,当我们进行恢复时,即使每个项目都被删除,布局仍然假定为12列,因此在图3中它显示6个图像,但认为它需要显示12它只是与其他的重叠。

相关问题