前言
完整的标题应该是,当文本像素超出固定值时显示省略号
代码实现
关键函数
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设置字符串太长,使用省略号显示 这个博主在使用QFontMetrics
的elidedText
方法时,自己还做了一次判断。完全没有必要,应该是没有仔细看参考手册。
QT QLabel内容太长时候使用省略号 这个博主没毛病