#include "mainwindow.h"#include "ui_mainwindow.h"
#include <QFontMetrics>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QString newStr = ui->label->text();
QFontMetrics fontWidth(ui->label->font());
QString elideNote = fontWidth.elidedText(newStr, Qt::ElideRight, ui->label->width());
ui->label->setText(elideNote);
ui->label->setToolTip(newStr);
}
MainWindow::~MainWindow()
{
delete ui;
}
1 让其自动换行
ui->label->adjushSize(); //自适应大小ui->label->setWordWrap(true); //自动换行
2 使用QFontMetrics::elidedText函数让文本显示省略号(省略号位置可以在文本开头/中间/末尾)
函数原型:QString QFontMetrics::elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0) const 第二个参数为文本缩略后,省略号所在的位置,可选:
Qt::ElideLeft 0 省略号应出现在文本的开头。
Qt::ElideRight 1 省略号应出现在文本的末尾。
Qt::ElideMiddle 2 省略号应出现在文本的中间。
Qt::ElideNone 3 省略号不应出现在文本中。
示例代码:
QString str = ui->label->text();
QFontMetrics metrics(ui->label->font());
if (metrics.width(str) > ui->label->width())
{
str = QFontMetrics(ui->label->font()).elidedText(str, Qt::ElideRight, ui->label->width());
}
ui->label->setText(str);
3 动态算出文本的宽高,在paintEvent里面自己绘制。
注:文本是基于 base line 绘制的,而不是文本的左上角。
示例代码:
通过drawText绘制
void MainWidget::paintEvent(QPaintEvent *){
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setFont(QFont("Times", 150, QFont::Bold));
QFontMetrics metrics = painter.fontMetrics();
int x = 0;
int y = metrics.ascent();
painter.drawText(x, y, "这是一个非常非常非常长的字符串");
}
标签:Qt,省略号,QFontMetrics,label,QLabel,ui,文本,补全
From: https://blog.51cto.com/u_12597366/7661156