Qt篇——QLabel固定尺寸的情况下让字体大小自适应并自动换行以完整显示

当文字较少时,默认字体大小为16;当文字内容较多时,自动换行并缩小字体。

举例:

字体较少时

字体较多时

思路:

设置自动换行属性 setWordWrap;通过QFontMetrics计算文字字体要多大、显示多少行才不会超过Label的尺寸从而完整显示,然后在每行文字的末尾添加空格让自动换行能够拆分你的字符串。

代码:

void MainFrame::fixedWrapLabel(QLabel *label, QString text) {
    QFont font = label->font();
    QFontMetrics metrics(font);
    //99999是字体最大数量, 利用QFontMetrics计算出文字的理论宽高
    QString elidedText = metrics.elidedText(text, Qt::ElideNone, 99999);
    //要把label的margin考虑进去
    int margin = label->margin();
    //设置自动换行
    label->setWordWrap(true);
    int pointSize = font.pointSize();
    int row = 1;
    //如果字体的总长度除以行数比label尺寸宽,则继续缩小字体
    while (metrics.width(elidedText) * 1.0 / row > (label->width() - margin * 2)
           && pointSize > 0) {
        //计算缩小字体后的文字高度和label的高度的比例,得出当前应该换多少行
        //我这里最多只用了3行,根据你的实际情况可以不限制最多行数
        if (metrics.height() < (label->height() - margin * 2) / 3.0) {
            row = 3;
        } else if (metrics.height() < (label->height() - margin * 2) / 2.0) {
            row = 2;
        }
        //缩小字体并设置给QFontMetrics 
        font.setPointSize(pointSize--);
        metrics = QFontMetrics(font);
        elidedText = metrics.elidedText(text, Qt::ElideNone, label->width());
    }
    int rowSize = elidedText.size() / row;
    //这里很关键,因为QLabel的setWordWrap自动换行不会分割字符和字母
    //所以我们要根据我们计算出来的行数,在每行末尾添加空格,QLabel换行会根据空格进行拆分换行
    for (int i = 1; i < row; i++) {
        elidedText.insert(rowSize * i + 1, " ");
    }
    //设置字体
    label->setFont(font);
    //显示添加空格来换行的最终文本
    label->setText(elidedText);
}

相关推荐

  1. ECharts标题字体大小适应变化

    2024-07-11 05:02:05       57 阅读
  2. EasyExcel表头宽度根据数据内容适应+自动

    2024-07-11 05:02:05       59 阅读
  3. python QTableWidget适应显示完整内容

    2024-07-11 05:02:05       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 05:02:05       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 05:02:05       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 05:02:05       58 阅读
  4. Python语言-面向对象

    2024-07-11 05:02:05       69 阅读

热门阅读

  1. mysql索引优化

    2024-07-11 05:02:05       18 阅读
  2. Qt 实战(2)搭建开发环境 | 2.2、.pro文件详解

    2024-07-11 05:02:05       20 阅读
  3. 完善kobj_type结构体

    2024-07-11 05:02:05       20 阅读
  4. 【C++中resize和reserve的区别】

    2024-07-11 05:02:05       22 阅读
  5. 音频基础知识

    2024-07-11 05:02:05       24 阅读
  6. SQL 索引

    2024-07-11 05:02:05       20 阅读
  7. docker自定义镜像

    2024-07-11 05:02:05       19 阅读
  8. IDEA Plugins 网络异常解决办法

    2024-07-11 05:02:05       17 阅读
  9. python3记录拨号光纤公网IP

    2024-07-11 05:02:05       19 阅读
  10. uniapp小程序使用webview 嵌套 vue 项目

    2024-07-11 05:02:05       24 阅读