在寫一些需要精確布局或者排版的軟體時候,我們需要知道文字的寬度和高度,保證我們在適當的座標中使用drawtext。例如,我在做乙個簡單的掃雷軟體時,希望把每個格仔附近的雷數給顯示在小格仔裡,如下圖所示,就需要這樣的功能。
不同的字型,字寬字高都是不一樣的。所以計算文字寬度的是乙個和字型相關的乙個類qfontmetrics。
qpainter p(this);可以用fm.width(text)獲得你想處理的字串text的寬度。而高度對於所有的字都是一樣的,可以用fm.ascent()+fm.descent()來實現。ascent是指從乙個字的基線(baseline)到最頂部的距離,descent是指乙個字的基線到最底部的距離。關於字型的一些術語,請參考qfontmetrics fm = p.fontmetrics();
要記住,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);
計算文字的寬度和高度
計算文字的寬度和高度 cgsize namesize self.status.name boundingrectwithsize namemaxsize option nsstringdrawingoptions attributes attrs context nil size 此方法計算字串 s...
動態計算文字寬度和高度
使用場景 例如在tableview的cell中,指定label最大寬度,高度不限,超過最大寬度則自動換行,先用這個方法來設定label的size,然後給label賦值string,即可得到自適應的label 返回uilabel自適應後的size param astring 字串 param widt...
樹的寬度與高度
求二叉樹的深度和寬度.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std struct btnode 先序建立二叉樹 void creatbtree btnode root else 求二叉樹的深度 intge...