是否可以将QListWidget的高度和宽度调整为其内容?
sizeHint()256, 192无论内容是什么,总是返回.
QListWidgetItem的sizeHint()回报-1, -1,所以我无法获得内容宽度.
问题与此处相同 - http://www.qtcentre.org/threads/31787-QListWidget-width,但没有解决方案.

import sys
from PyQt4.QtGui import *
class MainWindow(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
list = QListWidget()
list.addItem('111111111111111')
vbox = QVBoxLayout(self)
vbox.addWidget(list)
app = QApplication(sys.argv)
myapp = MainWindow()
myapp.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
gwo*_*pq9 46
无论内容是什么,sizeHint()总是返回256,192.
那是因为这是QListWidget的大小,视口,而不是项目.sizeHintForColumn()将为您提供所有项目的最大大小,因此您可以像这样调整窗口小部件的大小:
list.setMinimumWidth(list.sizeHintForColumn(0))
Run Code Online (Sandbox Code Playgroud)
如果您不想强制最小宽度,则子类并将其作为大小提示来提供.例如:
class ListWidget(QListWidget):
def sizeHint(self):
s = QSize()
s.setHeight(super(ListWidget,self).sizeHint().height())
s.setWidth(self.sizeHintForColumn(0))
return s
Run Code Online (Sandbox Code Playgroud)
使用takois 回答我玩了sizeHintForColumn或者sizeHintForRow发现你必须添加稍大一些的数字,因为可能还有一些依赖于样式的边距.ekhumoros 评论然后把我放在正确的轨道上.
简而言之,列表小部件的完整大小是:
list.sizeHintForColumn(0) + 2 * list.frameWidth()
list.sizeHintForRow(0) * list.count() + 2 * list.frameWidth())
Run Code Online (Sandbox Code Playgroud)
根据Violet 的评论,它可能在Qt 5中不起作用.
另请注意,将大小设置为内容,您不需要滚动条,因此我将其关闭.
我QListWidget调整其内容大小的完整示例:
from PySide import QtGui, QtCore
app = QtGui.QApplication([])
window = QtGui.QWidget()
layout = QtGui.QVBoxLayout(window)
list = QtGui.QListWidget()
list.addItems(['Winnie Puh', 'Monday', 'Tuesday', 'Minnesota', 'Dracula Calista Flockhart Meningitis', 'Once', '123345', 'Fin'])
list.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
list.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
list.setFixedSize(list.sizeHintForColumn(0) + 2 * list.frameWidth(), list.sizeHintForRow(0) * list.count() + 2 * list.frameWidth())
layout.addWidget(list)
window.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)