首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当QScrollArea中放置了更多小部件时,如何调整其内容的大小

当QScrollArea中放置了更多小部件时,如何调整其内容的大小
EN

Stack Overflow用户
提问于 2012-10-08 20:06:29
回答 4查看 29.6K关注 0票数 30

我有一个QScrollArea小部件,它从空开始;

它有一个垂直布局,有一个QGridLayout,和一个垂直间隔,使它保持在顶部,并防止它延伸到整个滚动区域;

在程序的其他地方,有一个QTextEdit,当它改变时,它的内容会被扫描“物种”元素,然后它们被添加到QGridLayout中。任何已被移除的物种元素也将被移除。这个比特可以工作;

我一直在打开垂直滚动条,所以当它出现时,它不会位于其他东西的顶部。请注意,滚动条已经比滚动框大了,尽管不需要。

这就是问题所在。滚动区域似乎是预设的,我无法更改它。如果我向QGridLayout中添加更多行,滚动区域的大小不会增加。

取而代之的是,它保持不变的大小,并挤压QGridLayout,使它看起来丑陋(一开始);

然后在添加更多之后,它变得不可用;

请再次注意,滚动条的大小仍然与前面的图像相同。前两张图片来自Qt Designer,后3张图片来自程序运行。

如果我调整窗口大小以使QScrollArea增大,则会看到以下内容:

表示滚动区域内的某些布局未正确调整大小。

我的问题是:当我在QGridLayout中添加和删除时,我需要做什么才能使小部件的可滚动区域动态调整大小?

EN

Stack Overflow用户

发布于 2021-09-04 18:44:06

关于Artfunkel's answer的更新

下面是一个PySide6演示,它使用"Populate“按钮来运行for循环,将项目添加到滚动区域。单击每个按钮时,也会将其自身删除。

代码语言:javascript
复制
from PySide6.QtWidgets import *

app = QApplication([])

scroll = QScrollArea()
scroll.setWidgetResizable(True) # CRITICAL

inner = QFrame(scroll)
inner.setLayout(QVBoxLayout())

scroll.setWidget(inner)  # CRITICAL


def on_remove_widget(button):
    button.deleteLater()


def populate():
    for i in range(40):
        b = QPushButton(inner)
        b.setText(str(i))
        b.clicked.connect(b.deleteLater)
        inner.layout().addWidget(b)

b = QPushButton(inner)
b.setText("Populate")
b.clicked.connect(populate)
inner.layout().addWidget(b)

scroll.show()
app.exec()
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12781407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档