QListWidget调整大小以适应内容

问题描述

| 是否可以根据其内容调整QListWidget的高度和宽度? content0ѭ始终返回
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_())
    

解决方法

           sizeHint()始终返回256,192否   无论其内容是什么。 那是因为这是QListWidget的大小,视口而不是项目的大小。 sizeHintForColumn()将为您提供所有项目的最大大小,因此您可以像这样调整小部件的大小:
list.setMinimumWidth(list.sizeHintForColumn(0))
如果您不想强制最小宽度,请子类化,并将其作为大小提示。例如。:
class ListWidget(QListWidget):
  def sizeHint(self):
    s = QSize()
    s.setHeight(super(ListWidget,self).sizeHint().height())
    s.setWidth(self.sizeHintForColumn(0))
    return s
    ,        使用takois答案,我在
sizeHintForColumn
sizeHintForRow
上玩耍,发现您必须添加稍大的数字,因为可能还会有一些与样式相关的边距。 ekhumoros发表评论,然后将我带入正确的轨道。 简而言之,列表小部件的完整大小为:
list.sizeHintForColumn(0) + 2 * list.frameWidth()
list.sizeHintForRow(0) * list.count() + 2 * list.frameWidth())
根据Violet的评论,它可能无法在Qt 5中使用。 另请注意,将大小设置为内容并不需要滚动条,因此我将其关闭。 我为ѭ11调整其内容大小的完整示例:
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_()
    ,        为了有效地使用sizeHint,至少在c ++中,您必须重写它。以我的经验,当您想要特定的行为时,小部件的默认实现可能会毫无用处。企图用间隔物或布局强加您想要的东西会导致灾难。如果可以从QListWidget派生并覆盖sizeHint,则可以遍历项目并找到最长的字符串,然后做一些魔术来确定其宽度。 无论如何,这就是我要做的。     ,        首先,您应该在列表中获得最大的字符串,这很容易获得。 获得该字符串后,请执行以下操作:
QFontMetrics * fm = new QFontMetrics(widget->font());
QRect rect;
rect = fm->boundingRect(string);
rect.width()具有最大字符串的宽度(以像素为单位) rect.height()具有它的高度。 将QListWidget宽度设置为该矩形的宽度(加上边距) 它的高度等于该矩形的高度乘以项目数 我没有测试代码,但希望它能使您走上正轨     ,        
QListWidget *valList;

valList =  new QListWidget(this);

valList->setSizePolicy (QSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored));
valList->setMinimumSize (QSize(1111,111));
    ,        您需要获取QListWidget的QHeaderView并调整其调整大小模式。 阅读此文档以获取更多信息 http://doc.qt.nokia.com/latest/qheaderview.html#ResizeMode-enum     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...