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。

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