自适应宽度下测量高度
比如我想求字符串中最大的字符宽度,这个时候对每个字符的宽度求值肯定不是固定的,所以可以先用MAXFLOAT
做约束,自适应宽度,代码如下:
QFont font;
QFontMetricsF fontMetrics(font);
QRectF textRect;
QRectF rect(0, 0, width, MAXFLOAT);
QRectF textRect = fontMetrics.boundingRect(rect, Qt::AlignTop | Qt::AlignLeft | Qt::TextWordWrap, text);
指定宽度下测量高度
某些情况下我想做文字的自动折行,指定了文本展示框的宽度之后,高度要通过折行策略达到自适应的效果:
QFont font;
QFontMetricsF fontMetrics(font);
QTextOption option;
option.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
qreal y = 0;
qreal leading = fontMetrics.leading();
QStringList paragraphs = text.split("\n");
for (const QString ¶graph : paragraphs)
{
QTextLayout layout;
layout.setText(paragraph);
layout.setFont(font);
layout.setTextOption(option);
layout.beginLayout();
while (true)
{
QTextLine line = layout.createLine();
if (!line.isValid())
break;
line.setLineWidth(width);
line.setPosition(QPointF(0, y));
y += line.height() + leading;
}
layout.endLayout();
}
QRectF textRect = QRectF(0, 0, width, y);