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 绘制的,而不是文本的左上角。
示例代码:
1通过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, "这是一个非常非常非常长的字符串");
}