Я пытаюсь поместить QVBoxLayout
внутрь QScrollArea
, чтобы его можно было прокручивать по вертикали.Однако элементы, кажется, не добавляются к нему.
Я увидел предложение, что мне следует создать внутренний виджет, который использует 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 дня), так что углубленноответы на то, куда я иду не так, как следуеткак виджет 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
перед привязкой виджета (чтобы в макете не было виджетов), привязка к виджетам ScrollArea, добавленным впоследствии, не отображается.Возможно, ScrollArea нужно перекрасить (хотя я не вижу для этого метода)?
Обновление 2 : вызов repaint()
для realmScroll или содержащегося в нем виджета ничего не делает, как и вызов activate/update()
на макете.