我遇到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和alignment一起使用,那么显示屏中将缺少部分字符串。
我知道还有关于此函数如何返回错误结果的其他帖子,我看过这些,他们没有帮助我。
我在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
但是边界的rextangle仍然很小,渲染时会丢失'S'的一部分。
答案 0 :(得分:0)
我通过计算我认为最宽的字符之一'M'来解决我的问题。
QRect rctCapM = objMetrics.boundingRect(rctParent, intAlign, "M");
然后我将其用作典型,然后计算其他字符串所需的边界矩形:
QRect rctBounds(0, 0, rctCapM.width() * strLine.length(), rctCapM.height());
'strLine'包含要显示和计算边界的字符串,这对我有用。