我目前正在渲染一个简单的QGraphicsItem
. 为了提高渲染性能,它的少数内部组件的边界框在构造函数中计算。
但是,我在文本宽度方面遇到了真正的问题,如下图所示:
我已经用绿线渲染了计算出来的 BB,这样你就可以很容易地看到发生了什么。现在我知道QFontMetrics::boundingRect(..)
它并不完全精确,因为它没有考虑斜体或字体抗锯齿 - 但这永远不会超过几个像素。
这是我计算最上面的“时钟”边界矩形的方法:
QFont font = Sy_application::font();
font.setPointSize( font.pointSize() * 2 );
QFontMetrics fontMet( font );
BB_ = fontMet.boundingRect( getNode()->getName() );
BB_.moveTop( 0.0 );
以下是我如何使用它来呈现文本QGraphicsItem::paint(..)
:
QFont font = Sy_application::font();
font.setPointSize( font.pointSize() * 2 );
painter->setFont( font );
painter->setPen( Qt::black );
painter->drawText( BB_.bottomLeft(), getNode()->getName() );
我检查了一些调试输出,BB_
在创建和使用之间没有变化。实际上fontMet.boundingRect( getNode()->getName() );
,创建它的返回一个 45 单位宽的边界矩形 - 时钟图标是 46。所以它肯定是错误的。
谁能看到我是如何使用QFontMetrics::boundingRect(..)
错误的?