如何解决如何向 QListWidget() 添加垂直滚动条
我有一个 while
,其中包含超出其可见边界的 QListWidget
,我想添加一个垂直滚动条。我尝试了以下方法:
QListWidgetItems
但没有可见的垂直滚动条。但是,当我将 sz = QtCore.QSize(200,200)
_lstwdgt = QtGui.QListWidget(parent)
_item = QtGui.QListWidgetItem(_lstwdgt)
_widget = QtGui.QWidget(parent)
_layout = QtGui.QVBoxLayout()
for n in range(0,10):
_btn = QtGui.QPushButton("test {}".format(n),parent)
_layout.addWidget(_btn)
_layout.addStretch()
_layout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
_widget.setLayout(_layout)
_item.setSizeHint(_widget.sizeHint())
_lstwdgt.addItem(_item)
_lstwdgt.setItemWidget(_item,_widget)
_lstwdgt.setFixedSize(sz)
vScrollBar = QtGui.QScrollBar(_lstwdgt)
_lstwdgt.setVerticalScrollBar(vScrollBar)
更改为 _layout
时,会出现一个水平滚动条,而缺少什么才能获得垂直滚动条?
解决方法
问题是默认每个视图都使用ScrollPerItem
滚动模式:在这种模式下,滚动条只用于在items之间滚动,而且由于你的view只有一个item,Qt不认为它必须显示滚动条。
解决办法是将模式改为ScrollPerPixel
:
_lstwdgt.setVerticalScrollMode(QtGui.QListWidget.ScrollPerPixel)
注意,如果你只需要在可滚动区域添加widgets,使用QListWidget确实是一个非常糟糕的主意,应该使用QScrollArea代替。
此外,添加拉伸是完全没有意义的,因为您对项目使用 sizeHint
,并且尺寸提示仅返回最小最佳尺寸(忽略任何拉伸,这是可以缩小到 0 个尺寸)。
我还强烈建议您使用更详细的变量名称,将名称缩写为 _lstwdgt
确实没有任何好处(也不为局部范围内的每个对象添加下划线前缀);我花了更多的时间来理解你的代码做了什么,而不是真正找到问题的原因。请记住,可读性在编程中确实很重要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。