在Qt中計算文字的寬度與高度

2021-06-01 23:26:37 字數 655 閱讀 3572

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

不同的字型,字寬字高都是不一樣的。所以計算文字寬度的是乙個和字型相關的乙個類qfontmetrics。

qpainter p(this);

qfontmetrics fm = p.fontmetrics();

可以用fm.width(text)獲得你想處理的字串text的寬度。而高度對於所有的字都是一樣的,可以用fm.ascent()+fm.descent()來實現。ascent是指從乙個字的基線(baseline)到最頂部的距離,descent是指乙個字的基線到最底部的距離。關於字型的一些術語,請參考

要記住,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...