QPainter绘制文本显示不全

QPainter 绘制文本,显示不全的问题

使用QPainterdrawText函数,绘制文本,drawText函数有很多重载版本,
在这里插入图片描述
此处主要介绍415行和420以及423行的三个函数

    inline void drawText(int x, int y, const QString &s);
    void drawText(const QRect &r, int flags, const QString &text, QRect *br = Q_NULLPTR);
    void drawText(const QRectF &r, const QString &text, const QTextOption &o = QTextOption());

使用第一个函数inline void drawText(int x, int y, const QString &s);绘制文本时,前面的参数 x, y为文本基线(baseline)的位置,如果不懂基线,可以参考一下此文章跳转

重点介绍一下第二个函数void drawText(const QRect &r, int flags, const QString &text, QRect *br = Q_NULLPTR); 其中第一个参数const QRect &r 指的是文本的矩形区域,很多同学计算文本宽度时,使用的QFontMetrics类的width函数或者boundingRect().width函数

width函数和boundingRect().width确实都可以计算文本的宽度,具体的差别,可以在帮助文档中查看,一般来讲, width函数计算出来的数值,会比boundingRect().width计算出来的数值要稍微大一点,很多同学就是使用 boundingRect().width计算出文本宽度,然后使用drawText方法绘制文本,例如:painter.drawText(QRect(100, 100, boundingRect(text).width, height), text);,结果发现文本显示不全;

可以发现,以上的drawText其实是调用的第三个函数,且没有传递第三个参数;其实boundingRect().width计算出来的文本宽度是正确的,只是我们不能这样调用drawText函数来绘制,我们应该指定水平对齐方式
例如调用第二个函数: painter.drawText(QRect(100, 100, boundingRect(text).width, height), Qt::AlignLeft, text);这样就能绘制正常了;这里的水平对齐方式,无论是水平居中,水平居左,还是水平居右都可以

放一个例子,演示drawText显示不全的现象
在这里插入图片描述
在这里插入图片描述
个人建议,保险起见还是使用width函数计算文本宽度,然后再使用第二个函数绘制文本,并指定文本的对齐方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值