一 问题
程序主窗口有靠边隐藏功能,在用户多屏环境(左右双屏)出现了问题:当用户将窗口拖到两屏中间任意一屏的边缘放下,主窗口来回游动。
二 原因
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. |