gpt4 book ai didi

qt - 如何创建可滚动的 QVBoxLayout?

转载 作者:行者123 更新时间:2023-12-03 11:01:52 26 4
gpt4 key购买 nike

我正在尝试放置 QVBoxLayoutQScrollArea 内以便它可以垂直滚动。但是项目似乎没有添加到它。

我看到一个建议,我应该创建一个 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在小部件被绑定(bind)之前(因此布局没有小部件),然后绑定(bind)到之后添加的 ScrollArea 小部件不显示。也许 ScrollArea 需要重新绘制(尽管我没有看到这样做的方法)?

更新 2 : 调用 repaint()在 realmScroll 或其包含的小部件上什么都不做,调用 activate/update() 也是如此。在布局上。

最佳答案

事实证明,通过将布局作为小部件的布局,我走错了路。执行此操作的实际方法很简单:

scrollarea = QScrollArea(parent.widget())
layout = QVBoxLayout(scrollarea)
realmScroll.setWidget(layout.widget())

layout.addWidget(QLabel("Test"))

我很确定我最初尝试过,但是嘿它正在工作。

然而,这增加了一个问题,即布局的项目垂直收缩,而不是导致滚动区域添加滚动条。

关于qt - 如何创建可滚动的 QVBoxLayout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com