QVBoxLayout
をQScrollArea
の内側に配置しようとすると、垂直方向にスクロールできるようになります。しかし、アイテムはそれに追加されていないようです。スクロール可能なQVBoxLayoutを作成するには?
私は、ScrollAreaが使用する内部ウィジェットを作成し、内部にレイアウトを配置するべきであるとの提案を見ましたが、うまくいきませんでした。私の構造はこのように見えるようになっている:私はどこに
# Irrelevant, added for context (this works)
centralWidget = QWidget(self)
self.container = QVBoxLayout(centralWidget)
centralWidget.setLayout(self.container)
self.setCentralWidget(centralWidget)
# Where trouble starts
self.realmScroll = QScrollArea(self.container.widget())
self.realmScroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.realmLayout = QVBoxLayout(self.container.widget())
self.realmScrollInner = QWidget(self.realmScroll)
self.realmScrollInner.setLayout(self.realmLayout)
self.realmScroll.setWidget(self.realmScrollInner)
self.container.addWidget(self.realmScroll)
# Doesn't add to realmLayout
self.realmLayout.addWidget(QLabel("test"))
私はまだ(2日間で)のQtを学んでいるので、詳細な答えを:
+-------------------------------
| QScrollArea(realmScroll)
| +----------------------------
| | QWidget(realmScrollInner)
| | +-------------------------
| | | QVBoxLayout(realmLayout)
、コードはこれを行うには間違っていると感謝します。
更新は:
すぐにrealmScrollInner
までaddWidget(QLabel())
作品はrealmScroll
のウィジェットとして設定されているようです。
self.realmLayout.addWidget(QLabel("test"))
# realmScrollInner bound to realmScroll
realmScroll.setWidget(realmScrollInner)
self.container.addWidget(realmScroll)
# Access realmScroll's widget and then layout to add
realmScroll.widget().layout().addWidget(QLabel("test"))
しかし、あなたはaddWidget
への最初の呼び出しを削除する場合は、ウィジェットが持って前に:UIは本当に正しいです、私はわからないんだけどこれは、私がこれをしなければならない表示された後、私は、要素を追加したいと思いますので、 (レイアウトにウィジェットがないため)、その後に追加されたScrollAreaウィジェットにバインドされません。おそらく、ScrollAreaは再描画が必要です(私にはそのためのメソッドはありません)。
アップデート2:レイアウトにactivate/update()
を呼び出す場合と同様にrealmScrollまたはそれに含まれるウィジェット上repaint()
を呼び出すと、何もしません。
私はちょうどこれに非常に似た問題がありました。ここのソリューションをご覧ください:http://stackoverflow.com/q/12781407/432913 – will