我有一个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(使用前将#替换为@)