為什麼在ARM板上qt字型會變小?

2021-08-14 22:36:15 字數 1619 閱讀 9296

因為qt在arm板上計算dpi值錯誤。

解決的方法就是設定好qt的dpi。

qt是根據顯示器的物理長度或者寬度於解析度的關係來計算dpi的。

對於qt5以下的版本設定如下:

export qws_display="linuxfb:mmwidth95:0" 

export qws_size="480x272"

對於qt5:

export qt_qpa_platform=linuxfb:fb=/dev/fb0:size=480x272:mmsize=95x53:offset=0x0

size指定螢幕解析度,mmsize指定螢幕物理尺寸。offset指定偏移量。

這樣qt在所有的平台上顯示的字型都一樣大了 就好了。

什麼是dpi值呢?每英吋的畫素點數,即單位點/英吋。網路上有好多寫ppi與dpi區別的帖子,沒大看懂,也無關緊要。我的顯示屏的解析度即(裝置解析度)是800*600;水平解析度是800,垂直解析度是600,顯示器物理寬度16cm,物理高度12cm,

則由式:

將qt是根據顯示器的物理長度或者寬度於解析度的關係來計算dpi的。dpi的計算如下:

水平 dpi = 水平 resolution /(顯示器寬度cm/2.54 )

垂直 dpi = 垂直 resolution /(顯示器高度cm/2.54 )

1英吋=2.54cm,可知,我的水平dpi和垂直dpi都是127.

在qfont當中有兩種方式設定字型大小,一種是pixelsize,另一種是pointsize

point實際是磅,也就是 1/72 inch

我們可以從qpaintdevice中得到當前dpi(dot per inch)。因此 pixel = dpi * point / 72

例如設定字型為20point。 那麼字型的畫素大小是 90 * 20 / 72 約等於 25.而dpi=120時,同樣20point,畫素增大,字型變大。可以將字型設定為25pixel,看到字型的大小就是20point和25pixel大小是一樣的。

所以在同一顯示屏下,螢幕大小就固定了,其顯示能力也固定了,也就是說顯示器橫向、縱向能夠顯示的畫素點是有上限的,如果顯示器的最佳顯示解析度為1440×900,那麼該顯示器橫向上最多也就1440個畫素點,再高就不行了!是硬體限制。縱向上也是如此。也就是從硬體上講(或者說是物理上),顯示器的物理dpi出廠後就確定了!包含兩個固定值:

1)螢幕尺寸,如14.1英吋

2)解析度上限,如1440×900

所以,每畫素的尺寸(1pixel=?inch)是個常量(螢幕上一定範圍的區域)。因而,設定的dpi值越大,字型越大。

而你設定的螢幕解析度(橫、縱方向畫素個數)越高,則能看到的東西越多,但是東西看起來越小(高解析度相當於用原子筆畫畫,筆畫細;低解析度相當於用毛筆畫畫,筆畫粗!)

qfont當中設定的大小,實際上字型的高度,由如下組成。

pixel pitch(點距): 畫素點間距離。可以用25.4mm / dpi得到。

字型在螢幕上的實際大小 = 字型畫素大小 * 點距=(顯示屏dpi*point/72)*(25.4/設定dpi)

因此如果想要看到更大的字型可以使用更大的點距。 有些顯示器的設定解析度(dpi)比較大,那麼單位長度中的畫素點就比較多,這樣乙個字所佔的長度就會比較少。

參考資料:

為什麼在ARM板上qt字型會變小?

因為qt在arm板上計算dpi值錯誤。解決的方法就是設定好qt的dpi。qt是根據顯示器的物理長度或者寬度於解析度的關係來計算dpi的。對於qt5以下的版本設定如下 export qws display linuxfb mmwidth95 0 export qws size 480x272 對於qt...

讓QT跑在ARM開發板上

前幾個星期為了搭建乙個android跑qt的編譯環境,由於不熟悉android開發的環境,什麼jdk,ndk,sdk,ant一大堆全沒聽過的名詞開始出現,即使有大神的書做參考,花了兩天的時間還是沒能在windows上面搭建出來,最後在linux上quest花了不到兩個小時就搞定,也不知道是什麼原因。...

sqlite3 在arm板上的編譯

對於乙個 使用了資料庫的程式,編譯會與普通程式不同,首先編譯會用到sqlite3 解壓編譯之後的buid資料夾下的 檔案庫。編譯 arm linux gnueabif gcc o test test.c test.h i home milan dufan test mx6 build include...