因为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



10-25 06:44