2012-08-18 48 views
2

我目前正在渲染一個簡單的QGraphicsItem。爲了提高渲染性能,在構造函數中計算幾個內部組件的邊界框。QFontMetrics返回具有非常錯誤寬度的邊界矩形

但是我在與文本寬度實際問​​題,如通過這一形象:

Bad Rectangles

我渲染計算的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(..)錯了嗎?

+1

在繪製方法中'boundingRect'計算是否返回與構造函數中相同的東西? – Mat

+0

@Mat是的,所以消除了'QPaintDevice'像素指標差異。好問題。 – cmannett85

+0

@Mat忽略最後一條評論,我做錯了......在'QFontMetrics'構造函數中爲QPaintDevice' arg添加'QGraphicsView'糾正了這個問題。據推測,目前有一些轉變正在進行,並未考慮到公制計算中的因素。感謝您的正確方向! – cmannett85

回答

2

QFontMetrics構造函數中爲QPaintDevice arg添加QGraphicsView糾正了此問題。據推測,目前有一些轉變正在進行,並未考慮到公制計算中的因素。