首页 > 代码库 > QT Demo 之 window(4) ScreenInfo

QT Demo 之 window(4) ScreenInfo

启动程序后,跳过Splash Screen之后就会看到下面的一个界面:

我们重点看一下界面的下半部分Screen Info部分。

上面分别显示了:

  • 屏幕名称
  • 屏幕尺寸(即分辨率)
  • 像素密度
  • 逻辑像素密度
  • 可用的屏幕尺寸
  • 屏幕方向
  • 原始的屏幕方向

下面我们就逐一展开每一项的实际意义。

屏幕名称

在PC上,如果只有一个屏幕就会显示为\\.\DISPLAY1,而如果是双屏幕,则会显示为\\.\DISPLAY2

获取了屏幕的名称后,我们就可以判断当前是在哪个显示设备上进行显示,从而可以完成一些自定义的操作。

屏幕尺寸和可用屏幕尺寸

Screen并没有直接的接口获取屏幕的尺寸以及可用的屏幕大小,而是提供了以下两组属性:
  • Screen.width和Screen.height
  • Screen.desktopAvailableWidth和Screen.desktopAvailableHeight

Screen.width和Screen.height的值表示了屏幕的原始大小,而Screen.desktopAvailableWidth和Screen.desktopAvailableHeight则是去除了状态栏、管理栏等由系统来管理的部分。

因此,在处理居中的控件时,如果是全屏居中就需要使用Screen.XXX,而如果是显示区域内居中,则要使用Screen.desktopAvailableXXX。

像素密度和逻辑像素密度

这两个参数分别是通过pixelDensity和logicalPixelDensity属性来获取的。不过,在官方的说明文档中,logicalPixelDensity属性被标记为obsolete,也就是是说废弃的。

像素密度的定义,在维基百科上给出的定义是:是一个表示打印图像或显示器单位面积上像素数量的指数。一般用来计量电脑显示器,电视机和手持电子设备屏幕的精细程度。通常情况下,每英寸像素值越高,屏幕能显示的图像也越精细。

上面的定义读起来不复杂,但是具体像素密度和逻辑像素密度表示什么,我个人还不是很懂。我首先做了一个测试,就是改变屏幕的分辨率,然后再次运行程序,观察像素密度和逻辑像素密度的值是否发生了改变。

测试的结果是,像素密度和逻辑像素密度的值是固定的72PPI和96PPI,并不随分辨率的设置而改变。因此,我们可以得出一个结论:像素密度和逻辑像素密度是一个屏幕的物理属性。

屏幕方向和原始的屏幕方向

Screen通过orientation和primaryOrientation属性分别表示了当前的屏幕方向和原始的屏幕方向,在PC上,这个两个值一直是landscape(2),这里的2表示是横向,如果是landscape(8)则表示是180°旋转的横向。

而通过获取屏幕的方向和原始方向,对于在支持旋转的设备上,则可以更好的调整控件显示。

总结

这一篇的博客比较水,主要是了解了Qt中的Screen对象。而在实际中,我们用到的最多的就是Screen.width和Screen.height。

QT Demo 之 window(4) ScreenInfo