1

内部に gridlayout を持つ scrollArea があり、それに QLabels を画像とともに追加します。アプリケーションが起動すると、正常に動作し、ラベルが正しく表示されます。

起動時 注: 現在のレイアウト スペースに収まるラベルの数を計算します。

私が最大化すると、それもうまくいきます: 私が最大化するとき

しかし、復元を押すと、奇妙なことが起こります: 復元後

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)
4

1 に答える 1

0

freenode の #pyqt のおかげで (Avaris に声をかけてください)、問題が何であるかがわかりました。QGridLayout のバグのようです。

ウィンドウを最大化すると、QGridLayout は 12 列で終了します。すべてのアイテムが削除されても、復元を行うと、レイアウトはまだ 12 列を想定しているため、図 3 では 6 つの画像を表示していますが、12 を表示する必要があると考えているため、重なっています。他のもの。

于 2012-07-10T07:54:28.367 に答える