2012-11-17 49 views
3

這發生在Linux上。爲什麼QFontMetrics :: lineSpacing()小於字符邊界框的高度?

問題示出了執行此代碼(我在小部件的塗料事件繪製)時:

painter.drawText(0, 0, 1000, 1000, 0, QString("0"), &charBoundingBox); 
qDebug() << "bounding box height" << charBoundingBox.height(); 
qDebug() << "lineSpacing" << painter.fontMetrics().lineSpacing(); 
qDebug() << "leading" << painter.fontMetrics().leading(); 
qDebug() << "height" << painter.fontMetrics().height(); 
qDebug() << painter.font(); 

它輸出:

bounding box height 11 
lineSpacing 7 
leading -1 
height 8 
QFont("Digital-7,10,-1,5,50,0,0,0,0,0") 

通知邊界框的高度爲字符爲11,行間距爲7。這部分是因爲領先是負面的,但即使沒有,字體高度仍然較小。

Qt如何計算它返回的字符邊界框?它的高度顯然不是來自fontMetrics::heightfontMetrics::leading

+0

爲什麼不呢?排版很複雜。 – ybungalobill

+0

因爲如果行空間小於字符,字符會重疊。事實上,這是首先提醒我的問題 – sashoalm

回答

1

不能保證畫家返回的邊界框的高度與字體高度相同。此外,行間距是字體高度和前導的總和。如果字體的前導是負數,則行距將小於高度。

此外,爲了確保您使用的是正確的指標,您應該使用painter.fontMetrics()而不是構造QFontMetrics(字體)。

在任何情況下,爲了確保上述情況發生在您的情況中,您應該單獨打印字體前導和字體高度(使用painter.fontMetrics())。

+0

這次我用'painter.fontMetrics()'測試過。對於Linux上的大多數字體來說,情況確實如此,前者是'-1',而高度等於邊界框。但是對於一些字體,包括'digital-7',前導是'0',而字體高度小於邊界框。 – sashoalm

相關問題