You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让QListWidget中的条目支持多行显示?

让QListWidget条目显示多行文本的解决方法

嘿,这个问题我之前也踩过坑!QListWidget默认会把带换行的文本挤成单行显示,核心是两个设置没跟上:允许文本换行,以及让条目高度自动适配多行内容。下面给你两种实用的解决方式:

方法一:手动处理单个条目(适合少量固定条目)

当你添加带\n的条目时,除了设置文本,还要调整条目尺寸来容纳多行内容:

// 创建条目并设置带换行的文本
QListWidgetItem* item = new QListWidgetItem("Line1\nLine2", yourListWidget);
// 可选:设置文本顶部对齐,避免多行时垂直居中显得奇怪
item->setTextAlignment(Qt::AlignTop);

// 计算文本需要的高度
QFontMetrics fm(item->font());
QSize textSize = fm.size(Qt::TextWordWrap, item->text());
// 设置条目尺寸:宽度用列表视图的可视宽度,高度用计算出的文本高度
item->setSizeHint(QSize(yourListWidget->viewport()->width(), textSize.height()));

// 关键:给列表开启自动换行功能
yourListWidget->setWordWrap(true);

方法二:自定义ItemDelegate(适合大量动态条目,一劳永逸)

如果你的列表会频繁添加多行条目,写个自定义委托来自动计算每个条目的高度更省心:

// 定义继承自QStyledItemDelegate的自定义委托类
class MultiLineItemDelegate : public QStyledItemDelegate
{
protected:
    QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override
    {
        QSize baseSize = QStyledItemDelegate::sizeHint(option, index);
        // 获取条目文本并计算多行显示所需的高度
        QString itemText = index.data(Qt::DisplayRole).toString();
        QFontMetrics fm(option.font);
        int multiLineHeight = fm.size(Qt::TextWordWrap, itemText).height();
        // 更新条目高度为多行所需值
        baseSize.setHeight(multiLineHeight);
        return baseSize;
    }
};

// 在窗口构造函数中给列表设置这个委托
yourListWidget->setItemDelegate(new MultiLineItemDelegate(this));
// 同样要开启自动换行
yourListWidget->setWordWrap(true);

这样设置后,不管是带\n的强制换行文本,还是因为列表宽度不足自动换行的文本,都能完整显示成多行啦。

内容的提问来源于stack exchange,提问作者Ufx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:24:19