2

我目前正在渲染一个简单的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(..)错误的?

4

1 回答 1

2

在构造函数中添加QGraphicsViewfor QPaintDeviceargQFontMetrics更正了该问题。据推测,视图中发生了一些未在度量计算中考虑的转换。

于 2012-08-19T08:55:40.700 回答