Qt:文本过长自动换行(支持纯英文, 纯数字)

该博客介绍了一种在Qt环境中处理字符串的方法,当字符串的像素长度超过设定的标签宽度时,通过代码实现自动换行。由于Qt的Label默认换行属性不支持纯英文和纯数字,此代码提供了一个解决方案,通过计算每个字符的宽度并在超过限制时插入换行符,确保内容能在指定宽度内正确显示。

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

此代码原理是获取字符串像素长度后, 超出设置的限制宽度后进行截取操作加换行符从而达到自动换行效果 

Qt的Lable自带的换行属性不支持纯英文,纯数字的字符串换行

// font 设置的字体属性
// text 文本
// nLabelSize 到达此宽度换行

QString ProcessingText(const QFontMetrics& font, const QString& text, int nLabelSize)
{
    int nTextSize = font.width(text);
    if (nTextSize > nLabelSize)
    {
        int nPos = 0;
        long nOffset = 0;
        for (int i = 0; i < text.size(); i++)
        {
            nOffset += font.width(text.at(i));
            if (nOffset > nLabelSize)
            {
                nPos = i;
                break;
            }
        }

        QString qstrLeftData = text.left(nPos);
        QString qstrMidData = text.mid(nPos);
        return qstrLeftData + "\n" + ProcessingText(font, qstrMidData, nLabelSize);
    }
    return text;
}

基本用法: 

    
    QLabel* pLable = new QLabel;
    int nLabelSize = 210;
    pLable ->setFixedWidth(nLabelSize);
    pLable ->setText("输入文本内容");

    QFontMetrics font(pLable->font());
    int nTextSize = font.width(pLable->text());
    
    if (nTextSize > nLabelSize)
    {
        QString qstrData = ProcessingText(font, pLable->text(), nLabelSize);

        pLable ->setText(qstrData);
    }
    else
    {
        pLable ->setText(pLable->text());
    }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值