QLabel实现针对纯英文或数字换行

阅读: 评论:0

QLabel实现针对纯英文或数字换行

QLabel实现针对纯英文或数字换行

QLabel面对有空格等特殊符号或中文时可以自动换行,只需要设置setWordWrap(true)即可。

当面对没有分隔开的长串英文与数字、英文符号(如 '.'就是英文符号,‘。’就是中文符号)时,QLabel无法自动换行。下面利用QFontMetrics实现换行,该类通过对font属性进行解析,提供指定font下的字符、字符串宽度等获取接口。

按不同字体库有两种情况,一是上述所提字符(统称英文数字符号)的宽度(同一pointSize或pixelSize设置下)都相等,也为我们利用该类手动换行提供了方便;二者就是宽度不一,这个需要修改计算部分代码,但也不难。总体思路就是:获取总长度确定是否换行;获取label宽度能容纳的最长子串;截取字符串并重复上述步骤。下面直接上代码,需要注意原生QLabel为空时会留有一个英文字符的宽度。
方法一:默认英文符号统一宽度,如Consolas字库

ResetText(const QString &text)
{if(text.isEmpty()) //待显示字符串为空,返回{return;}//initQString res;QString target = text;QFontMetrics fm(ui->label->font());int nWidth = ui->label->width() - fm.horizontalAdvance('x');int nMax = nWidth / fm.horizontalAdvance('x'); //一行容纳最大字符数int nCount = text.size(); //待显示字符数//wordwrap	QString temp;while(nMax < nCount) //不是最后一行{temp = target.left(nMax);temp.append("n");res.append(temp);ve(0, nMax);nCount = nCount - nMax;}res.append(target);ui->label->setText(res);
}

方法二:其他情况,如微软雅黑字库

ResetText(const QString &text)
{if(text.isEmpty()){return;}//initQString res; //存结果QString target = text; //便于截取待显示字符串QFontMetrics fm(ui->label->font());int nWidth = ui->label->width() - fm.horizontalAdvance('x'); //最大容纳字符宽度,若设置左右padding也需减去int nLength = fm.horizontalAdvance(text); //字符总长度int nCount = text.size(); //字符数//wordwrapwhile(nWidth < nLength){int n = (nWidth / (qreal)nLength) * nCount; //表示最接近行宽度的最左侧字符数QString temp = target.left(n);while(fm.horizontalAdvance(temp) <= nWidth){n++;temp = target.left(n);}while(fm.horizontalAdvance(temp) > nWidth){n--;temp = target.left(n);}temp.append("n");res.append(temp);ve(0, n);nCount = nCount - n;nLength = fm.horizontalAdvance(target);}res.append(target);ui->label->setText(res);
}

需要注意:

  1. 方法一仅针对没有隔开的英文数字符号且默认同一font下符号宽度相同,方法二没有默认该项;一般来说,方法一够用
  2. 设置nWidth时需要注意,如果你设置了padding或border需要减去对应的宽度
  3. 以上方法无需设置wordWrap属性,但需要提前设置Label宽度(当然这点很简单)
  4. 以上方法针对无分隔英文长串时,加上正则表达式判断即可;稍微修改亦可变成字符串处理函数
  5. 以上方法不止适用于英文数字字符长串,但其他情况一般没必要,设置wordWrap属性即可
  6. 以上方法仅进行过大小写字母、数字及部分英文符号测试,如有问题,请告知,谢谢。
  7. 转载链接:

本文发布于:2024-02-04 22:03:28,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170717420760005.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:英文   换行   数字   QLabel
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23