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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值