Qt5 多显示器获取不同显示器的分辨率和位置的方法
先放官方文档链接:
之前一直在用被我乱搞后的ShadowPlayer作为默认播放器,后来主力系统换成linux了也就没再用了。这两天the Witness发布,也正好想玩一些别的windows only的游戏,于是回到windows打算好好玩一玩游♂戏。而这几天因为集训也还是在机房,于是我拿着我那台电脑显示器连着笔记本玩双屏很爽,回到windows后发现依然很爽,不过播放器mini界面会有bug,总是会回到主显示器的最右面,于是打算修一修,然后就有了这一片水文(
在只有一个显示器的时候,获得显示器分辨率的方法是
miRPos = QApplication::desktop()-&screenGeometry().width(); //原来的写法,奇怪的变量名先无视
然而实际发现无论如何这个得到的分辨率都是主显示器的完整分辨率。然后查了Qt的,才发现,这个的原型是
const QRect QDesktopWidget::screenGeometry(int screen = -1) const
其中的参数就是显示器的id,默认是-1,如果是多个显示器,则显示器编号依次为0(主显示器),1,2,3...额,这个编号和你在设置里看到的编号没一点关系 :)
如图,这是我目前的显示设置情况,其中标识为2的显示器是主显示器,1则是扩展显示器。而实际上,我们通过
QDesktopWidget * deskTop = QApplication::desktop();
int curMonitor = deskTop-&screenNumber ( this ); // 参数是一个QWidget*
获得到的当前所在屏幕的编号来看,设置中标识为2的实际上是0,标识为1的实际是1.也就是说,系统设置中标识的编号和这里真的是一点关系都没有啦。
当我们获取到显示器编号后,就可以通过这个来获取当前所在屏幕的分辨率啦。
QRect rect = desktop-&screenGeometry(curMonitor);
这时rect.width和rect.height就是当前屏幕的分辨率了。而rect.x和rect.y是什么呢?回到刚刚的我的显示器设置情况的图,我们可以用上面的函数获取主(编号为2的)显示器rect.x和rect.y,你会发现rect.x=0,rect.y=0。可见,整个显示器“坐标”是以主显示器左上角为(0,0)点的。在扩展(此处编号为1的)显示器获得到的rect.x=-1366,rect.y=161说明这个就是那个扩展显示器左上角的坐标了。那么我们就很容易通过这个来计算我们所需要的屏幕坐标了。
我的需求是让这个仿osu的mini窗口的最右端和当前屏幕最右侧对齐,上端和当前屏幕上端保持25px的边距。那么就应该这样做。
miRPos = rect.x() + rect.width(); //当前屏幕最右侧的位置,别吐槽这个变量名了(?-_-)???
this-&setGeometry(miRPos - this-&width() , rect.y() + 25, this-&width(), this-&height());
然后我突然发现我是个奇葩的例外,因为我在小的显示器上打游戏的时候通常任务栏会挡住游戏窗体,于是我把任务栏拖到右面了...那么上面所得到的结果,窗体则始终会和屏幕的最右面对齐并忽视任务栏的存在,如果翻过reference的话,你会发现这个问题非常好解决,只需要把 screenGeometry() 换成 availableGeometry() 就行了。这个获取到的就是当前显示器的可用部分了,在windows下就是不包括任务栏了。
或许你在没创建widget的时候就想要获取一个分辨率信息用于初始化或者别的作用了,你可以通过 curMonitor = desktop-&primaryScreen(); 初始化显示器编号为主显示器的编号并由此获取主显示器的相关信息,或者通过其他提供的函数来达到你自己的目的。哦对了,好像curMonitor初始化为-1的时候获取到的也始终是主显示器的大小。毕竟默认值嘛。
最后的效果图:
完成啦,吃饭饭去
参考资料:
阅读(...) 评论()你知道怎么判断网上兼职是真的还是假的吗--任务易想做兼职的都进来看看!只需两个钟时间!_qt1366伊诺_天涯博客
让0014伊诺带你进入全国唯一承担全额赔付公会-1366吧!安全有保障!
今日访问:[$DayVisitCount$]
总访问量:107
开博时间:
博客排名:暂无排名
亲!对着电脑也会无聊吧,想试试网络工作吗?&赚点生活费,不限制工作时间&随时上线工作,多劳多得&工资一单一结算,日薪50元到100元&适合全职妈妈&大学生,上班族等,&有意向的下载QT,进入1366房间,说&0014伊诺推荐&有人讲解,各位
亲们,现在电脑已经很普及了,像是家里,单位,都是有电脑的,有笔记本的更是走到哪带到哪,有的人对着电脑没事做,发呆或者看电影,玩游戏之类的。但是,亲们,有没有想过利用那一点发呆的时间,或者玩游戏的时间来做个兼职呢?
&&&&我们这个QT1366工会,就会为你提供这个一个平台。当然,天下没有免费的午餐,我们是要收取一个入会费的,所以就会有人骂我们是骗子,我们这个工会存在很久了,我们不是靠骗你这点入会费生存的,我们为的就是大家共同盈利了,你入会了,就能赚取很多的,这个就是靠你自己的双手劳动挣来的,我们这每天超过两万人在线,如果是骗子我们只能从一开始的一个平台发展到现在,,大家可能都听过这个兼职,但是大家都不敢取尝试,为什么?因为大家都没找到一个正规的工会,都是打着兼职的旗号来骗取大家的入会费,这个是不可取的。我们为淘宝店铺卖家提供一个刷单的平台,来发放任务,我们做兼职的来接取这个任务赚取佣金。每个任务的佣金是在5-10元不等,每个任务花费的时间是在十五分钟左右,我们是靠自己的双手来赚取的,佣金是发任务的卖家直接打到你的账户里面,而且你做这个任务是不需要花费一分钱的本金的,也就是说你只需要入会费就可以了,这个任务也是很简单的,只有你有网购的经验,或者了解过网购就可以了,不会也没关系,我们这视频教学,包看包会的,不会收取培训的费用,什么时候学会为止。
也许有人会说:我先学,可以吗?这个当然是不行的,亲,我们大家都是来赚钱的,那些个维护平台正常管理的管理员,帮你办理入会的接待,还有培训,他们也是需要挣钱的。你交的这个入会费就包括这些个费用,大家都要相互了解,没有人愿意白白出力却不挣钱的,我们既然收这个费用,就保证你能赚到更多的,要不然我们的发展就会停滞,就会被人骂骗子,没有人愿意这样的,亲们,来了解一下把,我们可以跟你大概的讲解一下。好了,想了解的就去QT&&1366&房间,进去说"0014伊诺推荐"我们的讲解会语音接待你的,亲,那些加你QT好友的,或者私聊你的,给你发链接的都是骗子,请认准唯一官方QT房间:1366,请认准官方接待为语音接待,我们会热情的为你讲解。谢谢大家分类: |