爲什麼在ARM板上qt字體會變小?

因爲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)比較大,那麼單位長度中的像素點就比較多,這樣一個字所佔的長度就會比較少。
參考資料:http://hi.baidu.com/xf19890224/item/46dfe33a31989f05ceb9fe33
                http://blog.csdn.net/kelleniiii/article/details/8968327

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章