Qt 测量文字展示尺寸的两种方式

自适应宽度下测量高度

比如我想求字符串中最大的字符宽度,这个时候对每个字符的宽度求值肯定不是固定的,所以可以先用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 &paragraph : 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);

你可能感兴趣的:(Qt,qt,ui,开发语言)