Qt实现长文件名(字符串)在QLabel中自适应缩短
来源:互联网 发布:8选1数据选择器74ls151 编辑:程序博客网 时间:2024/05/16 09:50
一、应用场景简述
当在有限宽度的QLable中显示很长的文件名/字符串时,超出QLabel宽度部分将不会显示,此时采取缩短文件名策略(也可实现为字符串滚动动画)可以缓解这一问题。在实现这一想法的过程中,先后提出两个解决方案。遂再次分享给大家。
二、方案实现
//方案1:简单的保留前面几个字符,去出中间的几个字符,保留后面几个字符
QString scalText(QString org){ QString result; const quint16 strLen = org.length(); int index = org.lastIndexOf("."); if(-1 == index){ //如果返回-1表示没找到 //无后缀名 QString fileName = org; if( strLen < 11) result = fileName; else{ result = fileName.mid(0,3); //取前三个字符 result += "..."; result = fileName.mid(strLen-6,6); //取后6个字符 } } else{ //有后缀名 if( strLen < 11){ result = org; } else{ const QString fileName = org.left(index); //文件名 const quint16 fileNameLen = fileName.length(); const QString fileExtName = org.right(strLen - 1 - org.lastIndexOf(".")); //文件扩展名 result = fileName.mid(0,3); result += "..." + fileName.mid(fileNameLen-3,3); //取后3个字符 result += "." + fileExtName; //追加后缀名 } } return result;}此实现方案灵活性差,通用性差,而且在文件名/字符串中混合这ASCII码和宽字符时显示效果极差。
//方案2:根据QLabel的实际宽度、字体的尺寸属性等对文件名进行缩短
//目标: 将“长文件名测试文件-长文件名测试文件-长文件名测试文件.wmv 1203MB”缩短为“长文件名...测试文件.wmv 1203MB”
//定义: QString scalText(QStringorg, unsigned intshowWidth ,QStringarg1="");
//参数:org-待缩短的字符串/文件名,如上面的“长文件名测试文件-长文件名测试文件-长文件名测试文件.wmv”
// showWidht-QLabel的实际宽度
// arg1-追加到org后面的补充字符串
QString scalText(QString org, unsigned int showWidth ,QString arg1){ QString result; QString chngeStr("..."); QFontMetrics fm(QFont("微软雅黑",10)); const unsigned int labWidthPxs = showWidth-10; //label的固定宽度 int textWidthInPxs = fm.width(org); int unitsWidthPxs = fm.width(arg1); int blankWidthPxs = fm.width(" "); int chngeWidthPxs = fm.width(chngeStr); unsigned int remainWidthPxs = labWidthPxs - unitsWidthPxs - blankWidthPxs - chngeWidthPxs; if(textWidthInPxs < remainWidthPxs){ result = org; } else{ short preIndex = 4, rearIndex =4; //保留前4个字符 int pickUpWidthPxs = 0; do{ ++rearIndex; QString pickUp = org.mid(preIndex,rearIndex-preIndex); pickUpWidthPxs = fm.width(pickUp); QString preFix = org.mid(0,preIndex); QString sufFix = org.mid(rearIndex, org.length()-rearIndex); result = preFix + chngeStr + sufFix; }while(textWidthInPxs-pickUpWidthPxs > remainWidthPxs); } return result;}
测试:
ui->label.setText(scalText(fileName, ui->label.Width(), "1023MB");
三、更新
第一次更新 2016-09-05
0 0
- Qt实现长文件名(字符串)在QLabel中自适应缩短
- QT 实现在ui控件QLabel中实现滚动字幕
- Qt 在同一个QLabel中实现不同样式的显示
- Qt 在同一个QLabel中实现不同样式的显示
- Qt中QLabel的字符串连接
- Qt中在QLabel中连续的刷入图片
- Qt之图片自适应QLabel的大小
- Qt实现在QLabel上绘制2D图形
- QT控件中布局QLabel让其自适应大小自动换行遇到的问题
- Qt 让QLabel自适应text的大小,并且自动换行
- Qt 让QLabel自适应text的大小,并且自动换行
- 长文件名在FAT文件系统上的实现
- Qt中在QLabel上载入图片后在上面画矩形框的方法
- Qt::QLabel
- QT 实现QLabel上的超链接
- QT 实现QLabel上的超链接
- QT 实现QLabel上的超链接
- QT 实现QLabel上的超链接
- 快速排序
- 这是面试谈薪的最佳时机!
- UItableView 的一些小细节
- EditText自定义边框、虚线、圆角、形状的实现
- Java发邮件在windows下面可以,在Linux上面发不了
- Qt实现长文件名(字符串)在QLabel中自适应缩短
- wifi驱动的理解(1)——驱动架构
- php扩展学习信息备份
- CSR系列开发板的编程器/烧写器
- Android SDK目录下各个文件夹的作用
- 学习笔记之自定义控件
- org.apache.catalina.core.StandardHostValve.customException Processing ErrorPage[errorCode=500, locat
- 理解RESTful架构
- jsp页面的数显示两位小数