我试图把QVBoxLayout
内QScrollArea
,以便它是滚动垂直。然而,物品似乎并未添加到它。如何创建一个可滚动QVBoxLayout?
我看到了一个建议,我应该创建一个在ScrollArea使用并把里面的布局内构件,但似乎工作不。我的结构应该是这样的:
+-------------------------------
| QScrollArea(realmScroll)
| +----------------------------
| | QWidget(realmScrollInner)
| | +-------------------------
| | | QVBoxLayout(realmLayout)
和代码来做到这一点:
# 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"))
我还在学习的Qt(2天),因此在深入回答我在哪里我会错误的将不胜感激。
更新:
看来,addWidget(QLabel())
作品的权利,直到在realmScrollInner
已经被设置为realmScroll
的部件。因为我想添加元素UI显示后我不得不这样做,这我不知道真的是正确的:
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
的小部件有前被绑定(这样布局具有没有窗口小部件),然后结合后来加入的不显示ScrollArea小部件。也许ScrollArea需要重绘(虽然我没有看到一个方法)?
更新2:调用上realmScroll或其包含插件repaint()
什么都不做也呼吁布局activate/update()
。
我刚刚有一个非常类似的问题,请参阅此处的解决方案:http://stackoverflow.com/q/12781407/432913 – will