我对Qt比较陌生,我通过PySide访问它。在
我有一个很长的内容列表,我想垂直滚动。
水平尺寸不是问题。我试着用QScrollArea
来做这个。下面是一个最小的例子:
import sys
import PySide.QtGui as gui
application = gui.QApplication(sys.argv)
window = gui.QScrollArea()
list = gui.QWidget()
layout = gui.QVBoxLayout(list)
for i in range(100):
layout.addWidget(gui.QLabel(
"A something longish, slightly convoluted example text."))
window.setWidget(list)
window.show()
sys.exit(application.exec_())
发生了什么:
滚动区域将其水平大小设置为标签所需的大小
它注意到垂直空间不足,因此添加了一个垂直滚动条。
由于垂直滚动条,水平空间现在也不够,所以水平滚动条也显示出来了。
我可以用setHorizontalScrollBarPolicy
使水平滚动条消失,但主要问题仍然存在:垂直滚动条模糊了部分标签。在
如何将滚动区域的宽度设置为不需要水平滚动条的最小值?在
您的示例有点不切实际,因为滚动区域被设置为顶层窗口。更典型的是,它将是一个子小部件,它的初始大小将由一个布局决定,并且将间接地受到其他小部件和/或布局的大小的限制。作为一个顶层窗口,约束是不同的,并且部分受窗口管理器的影响(窗口管理器的具体行为可能因平台而异)。在
要确保滚动区域的大小正确,必须根据其内容为其设置最小宽度,并允许垂直滚动条和框架。最好将widgetResizable属性设置为
True
,并在内容布局的末尾添加一个可扩展的分隔符。在在下面的示例中,我更改了标签的背景颜色,以便更容易看到发生了什么。我还允许调整窗口的大小,使其小于初始大小,在显示后重置最小宽度,但这是可选的。在
尝试在小部件中使用sizeHint(),并使用结果设置QScrollArea的最小宽度。在
这里有一些额外的信息:http://doc.qt.io/qt-5/layout.html
相关问题 更多 >
编程相关推荐