我目前正在渲染一個簡單的QGraphicsItem
。爲了提高渲染性能,在構造函數中計算幾個內部組件的邊界框。QFontMetrics返回具有非常錯誤寬度的邊界矩形
但是我在與文本寬度實際問題,如通過這一形象:
我渲染計算的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(..)
錯了嗎?
在繪製方法中'boundingRect'計算是否返回與構造函數中相同的東西? – Mat
@Mat是的,所以消除了'QPaintDevice'像素指標差異。好問題。 – cmannett85
@Mat忽略最後一條評論,我做錯了......在'QFontMetrics'構造函數中爲QPaintDevice' arg添加'QGraphicsView'糾正了這個問題。據推測,目前有一些轉變正在進行,並未考慮到公制計算中的因素。感謝您的正確方向! – cmannett85