Qt QDesktopWidget 多屏時程式靠邊隱藏問題
一 問題
程式主視窗有靠邊隱藏功能,在使用者多屏環境(左右雙屏)出現了問題:當用戶將視窗拖到兩屏中間任意一屏的邊緣放下,主視窗來回遊動。
二 原因
Qt中基本上靠邊隱藏的機制都是檢測螢幕邊緣,當符合條件時,設定移動路徑開啟動畫自動移動隱藏或者顯示。問題出現在雙屏環境時檢測螢幕邊緣出現錯誤。當前使用者環境多屏的場景越來越普遍,Qt中的QDesktopWidget類對多屏場景進行了比較全面的支援。
三 QDesktopWidget
可以通過QApplication::desktop()獲取指標。
1 屬性
1)primaryScreen
返回值為主螢幕的index
2)screenCount
螢幕數量
3)virtualDesktop
虛擬桌面,可以通過isVirtualDesktop進行判斷。
2、常用方法
1)availableGeometry
有過載方法,根據引數返回所選index的螢幕或者包括視窗的螢幕或者包含某一點的螢幕的有效區域。
所謂有效區域,在mac上要減去dock和menu bar ;在windows上要減去task bar。
2)screenGrometry
有過載方法,根據引數返回所選index的螢幕或者包括視窗的螢幕或者包含某一點的幾何區域(geometry)。
所謂幾何區域,看一張Qt assistant上的圖理解一下(搜尋 window Geometry):
各類位置相關的方法總結如下(Qt assistant):
Including the window frame: x(), y(), frameGeometry(), pos(), and move().
Excluding the window frame: geometry(), width(), height(), rect(), and size().
3)screenNumber
有過載方法,所在的螢幕index.
4 ) width , height
由於QDesktopWidget類派生自Qwidget,所有有這兩個方法,要注意的是多屏的時候,這兩個函式和size方法指的所有螢幕的集合而不是單個螢幕。
3、訊號
1)primaryScreenChanged
主螢幕發生改變
2)screenCountChanged
螢幕數量發生改變
四 注意點
1、靠邊隱藏、居中顯示等與螢幕相關的場景,均要考慮如今的多屏。
2、多屏問題場景比較複雜:擴充套件方向、螢幕大小不一致等等,注意兼顧。
五 備註
以上參考Qt assistant 5.9.2.