在寫一些需要精確布局或者排版的軟件時候,我們需要知道文本的寬度和高度,保證我們在適當的坐標中使用drawText。例如,我在做一個簡單的掃雷軟件時,希望把每個格子附近的雷數給顯示在小格子里,如下圖所示,就需要這樣的功能。

不同的字體,字寬字高都是不一樣的。所以計算文本寬度的是一個和字體相關的一個類QFontMetrics。
QPainter p(this);
QFontMetrics fm = p.fontMetrics();
可以用fm.width(text)獲得你想處理的字串text的寬度。而高度對于所有的字都是一樣的,可以用
fm.ascent()+fm.descent()來實現。ascent是指從一個字的基線(baseline)到最頂部的距離,descent是指一個
字的基線到最底部的距離。關于字體的一些術語,請參考
http://book.csdn.net/bookfiles/308/10030812802.shtm
要記住,QPainter的drawText畫字的基點坐標是字串的基線(不是底部,也不是頂部,而是下部)。看下面的貼圖

所以,如果你想在坐標(0,0,20,20)的框正中畫一個字的話,可以使用
QPoint pt((20-fm.width(text))/2,(20-(fm.ascent()+fm.descent()))/2+fm.ascent());
p.drawText(pt,text);