首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QFontMetrics boundingRect

QFontMetrics boundingRect
EN

Stack Overflow用户
提问于 2016-06-20 12:55:05
回答 1查看 797关注 0票数 2

QFontMetrics 'boundingRect‘函数有问题,它没有返回正确的结果。

代码语言:javascript
复制
    mfntArial = QFont("Arial", 12, QFont::Bold);
    QFontMetrics objMetrics(mfntArial);
    QRect rctLine = objMetrics.boundingRect("LOS");

在调试器中,rctLine包含:

代码语言:javascript
复制
    x1 : 1
    x2 : 26
    y1 : -16
    y2 : 4

这是非常令人困惑的,我希望x1和y1都是0,因为没有传递引用位置,而且我希望x2和y2都是正的。

返回的矩形不正确,如果我将其与drawText和对齐一起使用,则显示中缺少部分字符串。

我知道还有其他关于这个函数如何返回错误结果的帖子,我看过这些,它们对我没有帮助。

我在RedHat 7.2上使用Qt5.6。

我也试过:

代码语言:javascript
复制
    QRect rctParent = pobjParent->geometry();
    QRect rctLine = objMetrics.boundingRect(rctParent, intAlign, "LOS");

其中,pobjParent是父小部件,rctParent包含:

代码语言:javascript
复制
    x1 : 8
    x2 : 289
    y1 : 24
    y2 : 447

intAlign包含33 (左,上)

在本例中,rctLine返回:

代码语言:javascript
复制
    x1 : 8
    x2 : 35
    y1 : 24
    y2 : 44

但是边框仍然是小的,当呈现时,S的一部分丢失了。

关于QFontMetrics的官方Qt文档

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-20 13:20:48

我通过计算我认为最宽的字符'M‘的宽度来解决我的问题。

代码语言:javascript
复制
    QRect rctCapM = objMetrics.boundingRect(rctParent, intAlign, "M");

然后将其作为一个典型的值,然后计算其他字符串所需的边框:

代码语言:javascript
复制
    QRect rctBounds(0, 0, rctCapM.width() * strLine.length(), rctCapM.height());

其中“strLine”包含要显示和计算边界的字符串,这对我来说是有效的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37923149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档