在寫(xiě)一些需要精確布局或者排版的軟件時(shí)候,我們需要知道文本的寬度和高度,保證我們?cè)谶m當(dāng)?shù)淖鴺?biāo)中使用drawText。例如,我在做一個(gè)簡(jiǎn)單的掃雷軟件時(shí),希望把每個(gè)格子附近的雷數(shù)給顯示在小格子里,如下圖所示,就需要這樣的功能。

不同的字體,字寬字高都是不一樣的。所以計(jì)算文本寬度的是一個(gè)和字體相關(guān)的一個(gè)類(lèi)QFontMetrics。
QPainter p(this);
QFontMetrics fm = p.fontMetrics();
可以用fm.width(text)獲得你想處理的字串text的寬度。而高度對(duì)于所有的字都是一樣的,可以用
fm.ascent()+fm.descent()來(lái)實(shí)現(xiàn)。ascent是指從一個(gè)字的基線(xiàn)(baseline)到最頂部的距離,descent是指一個(gè)
字的基線(xiàn)到最底部的距離。關(guān)于字體的一些術(shù)語(yǔ),請(qǐng)參考
http://book.csdn.net/bookfiles/308/10030812802.shtm
要記住,QPainter的drawText畫(huà)字的基點(diǎn)坐標(biāo)是字串的基線(xiàn)(不是底部,也不是頂部,而是下部)。看下面的貼圖

所以,如果你想在坐標(biāo)(0,0,20,20)的框正中畫(huà)一個(gè)字的話(huà),可以使用
QPoint pt((20-fm.width(text))/2,(20-(fm.ascent()+fm.descent()))/2+fm.ascent());
p.drawText(pt,text);
本站所有文章由本站和原作者保留一切權(quán)力,僅在保留本版權(quán)信息、原文鏈接、原文作者的情況下允許轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)勿刪改原文內(nèi)容, 并不得用于商業(yè)用途。 謝謝合作。