1. 程式人生 > >Qt QDesktopWidget 多屏時程式靠邊隱藏問題

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.