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

2024-04-22

我有一个Q滚动区域 http://doc.qt.digia.com/4.7-snapshot/qscrollarea.html小部件,一开始是空的;

它有一个垂直布局,带有一个 QGridLayout 和一个垂直间隔符,以将其保持在顶部,并防止其拉伸到整个滚动区域;

在程序的其他地方,有一个 QTextEdit,当它发生更改时,会扫描其内容以查找“species”元素,然后将它们添加到 QGridLayout 中。任何已被移除的物种元素也将被移除。这一点有效;

我一直打开垂直滚动条,这样当它出现时,它就不会位于其他内容之上。请注意,尽管不需要,但滚动条已经大于滚动框。

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

相反,它保持相同的大小,并挤压 QGridLayout,使其看起来很丑(一开始);

然后添加更多后就无法使用了;

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

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

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

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


如果您从 Google 来到这里,但没有获得接受的答案,那是因为您错过了另一个秘密调用:QScrollArea::setWidget。您必须创建并明确地标识要滚动的单个小部件。仅仅将项目添加为子项是不够的!直接添加多个项目ScrollArea也将不起作用。

该脚本演示了 QScrollArea 的一个简单的工作示例:

from PySide.QtGui import *

app = QApplication([])

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

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

scroll.setWidget(inner) # CRITICAL

for i in range(40):
    b = QPushButton(inner)
    b.setText(str(i))
    inner.layout().addWidget(b)

scroll.show()
app.exec_()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当更多的小部件放置在 QScrollArea 中时,如何调整 QScrollArea 的内容大小 的相关文章

随机推荐