繁体   English   中英

QFontMetrics boundingRect

[英]QFontMetrics boundingRect

我在使用QFontMetrics'boundingRect'函数时遇到问题,它没有返回正确的结果。

    mfntArial = QFont("Arial", 12, QFont::Bold);
    QFontMetrics objMetrics(mfntArial);
    QRect rctLine = objMetrics.boundingRect("LOS");

在调试器中,rctLine包含:

    x1 : 1
    x2 : 26
    y1 : -16
    y2 : 4

这非常令人困惑,我希望x1和y1都为0,因为没有传递参考位置,并且我希望x2和y2都为正。

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

我知道还有其他有关此函数如何返回错误结果的帖子,而我查看了这些帖子,它们并没有帮助我。

我在RedHat 7.2上使用Qt5.6。

我也尝试过:

    QRect rctParent = pobjParent->geometry();
    QRect rctLine = objMetrics.boundingRect(rctParent, intAlign, "LOS");

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

    x1 : 8
    x2 : 289
    y1 : 24
    y2 : 447

intAlign包含33个(左,上)

在这种情况下,rctLine返回:

    x1 : 8
    x2 : 35
    y1 : 24
    y2 : 44

但是边界矩形仍然很小,渲染时缺少部分“ S”。

关于QFontMetrics的官方Qt文档

我通过计算我认为是最宽的字符之一“ M”的宽度来解决我的问题。

    QRect rctCapM = objMetrics.boundingRect(rctParent, intAlign, "M");

然后,将其用作典型值,然后计算其他字符串所需的边界矩形:

    QRect rctBounds(0, 0, rctCapM.width() * strLine.length(), rctCapM.height());

在“ strLine”包含要显示和计算范围的字符串的情况下,这对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM