QT QFontMetri 文本过长时显示省略号

本文介绍了如何在Qt中使用QFontMetrics的elidedText函数来截断并显示超出固定宽度的文本,特别是针对QLabel的使用示例。讨论了在处理中文和英文字符时可能遇到的问题,并展示了垂直显示文本并截断的案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

完整的标题应该是,当文本像素超出固定值时显示省略号

代码实现

关键函数
QString QFontMetrics::elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0) const
在这里插入图片描述
text的像素宽度超过width,将返回字符串的一个省略版本取决于mode。否则将返回原字符串

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QFontMetrics>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QFontMetrics fontMetrics(ui->label->font());
    const QString str = QStringLiteral("明天见到你我真的很高兴啊");
    const QString elidedStr = fontMetrics.elidedText(str, Qt::ElideRight, ui->label->width());
    ui->label->setText(elidedStr);
}

Widget::~Widget()
{
    delete ui;
}

思考

当有一些特殊需求时,我们可能需要更加灵活的处理。如有一个宽30高120的label。要求text垂直显示,同时当超出长度显示省略号如下面的效果

    ui->setupUi(this);
    QFontMetrics fontMetrics(ui->label->font());
    const QString str = QStringLiteral("明天见到你我真的很高兴啊");
    const QString elidedStr = fontMetrics.elidedText(str, Qt::ElideRight, ui->label->width());
    ui->label->setText(elidedStr);

    const QString elidedStr1 = fontMetrics.elidedText(str.split("", QString::SkipEmptyParts).join("\n"), Qt::ElideRight, ui->label_2->height());
    qDebug() << elidedStr1;
    ui->label_2->setText(elidedStr1);

效果
在这里插入图片描述
**注意:**全部使用中文字符好像没有什么问题。但是使用英文字符后就会导致问题。目前没有找到很好的解决方案。欢迎大佬在评论区留言

参考文章

Qt设置字符串太长,使用省略号显示 这个博主在使用QFontMetricselidedText方法时,自己还做了一次判断。完全没有必要,应该是没有仔细看参考手册。
QT QLabel内容太长时候使用省略号 这个博主没毛病

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值