一个支持多屏显示的程序

原文地址:http://blog.sina.com.cn/s/blog_4868f98601019odo.html 。感谢作者,如果造成任何不便,请联系我删除。
最近要用到多屏显示。
多屏显示的原理其实很好理解,就拿横向扩展来说:
计算机把桌面的 宽度扩展成了 w1(屏幕1的宽度) + w2(屏幕2的宽度) 。
当一个窗口的起始横坐标 > w1,则 他就被显示在第二个屏幕上了。

qt的说明文档中用一张图阐述了这个情况:

qt学习笔记(四)—— <wbr>一个支持多屏显示的程序


QApplication 提供了一个获得virtual desktop的方法:
QDesktopWidget *desktop =  QApplication:: desktop();
返回的 QDesktopWidget 存储着当前桌面的信息。
 
 
注意 ,这个函数必须在创建了 QApplication 对象之后才能使用, 否则会出错具体原因,要问qt
 
 
这个desktop有几个很有用的函数,用来获取当前的屏幕状态和分辨率
1) int desktop->primaryScreen() 
获取主屏幕的索引序号,(windows开始菜单所在的屏幕为主屏幕), 每个副屏幕序号+1
 
 
2) int  desktop->screenCount()
获取当前屏幕个数
 
 
3) QRect desktop->screenGeometry(int screen_index)
根据当前的屏幕序号获取屏幕宽高等属性
 
 
4) int desktop->width()
获取虚拟屏幕全宽, 注意这个比较猛,是获取的总宽度,对于横向扩展屏来说,也就是 屏幕1+ 屏幕2 + ... 的宽度
 
 
5) int desktop->height()
获取虚拟屏幕全高
 
 
 
 
下面的这个程序就可以测试多屏(只测了横屏,没测试纵屏): 根据当前屏幕数量n,生成n个窗口,每个窗口都占据了一个屏幕
 
 
#include "mainwindow.h"
 
 
#include <QApplication>
 
 
#include <QDesktopWidget>
 
 
#include <cstdio>
 
 
#include <QMessageBox>
 
 
 
 
 
 
 
 
 
 
typedef struct{
 
 
int screen_no;
 
 
QRect rect;
 
 
}SCREEN;
 
 
SCREEN g_screens[10];
 
 
 
 
 
 
 
 
 
 
int main(int argc, char *argv[])
 
 
{
 
 
QApplication app(argc, argv);
 
 
QDesktopWidget *desktop = QApplication::desktop();
 
 
 
 
 
 
int screen_count = desktop->screenCount();
 
 
 
 
 
 
int prim_screen = desktop->primaryScreen();
 
 
char warning[100], *idx=warning;
 
 
for(int i=0; i<screen_count ;i++ ){
 
 
g_screens[i].screen_no = prim_screen + i;
 
 
g_screens[i].rect = desktop->screenGeometry(prim_screen + i);
 
 
sprintf(idx, "screen%d w[%d], h[%d] ",i, g_screens[i].rect.width(),g_screens[i].rect.height());
 
 
idx += strlen(idx);
 
 
}
 
 
sprintf(idx, "total width[%d] , total height[%d] \n", desktop->width(), desktop->height() );
 
 
QMessageBox::warning(NULL, "screen", warning, QMessageBox::Ok);
 
 
 
 
 
 
MainWindow wnd[5];
 
 
for(int i=0; i < screen_count; i++){
 
 
wnd[i].resize(g_screens[i].rect.width(),g_screens[i].rect.height());
 
 
if(i == 0)
 
 
wnd[i].move(0,0);
 
 
else
 
 
wnd[i].move(i* g_screens[i-1].rect.width(),0);
 
 
char str[50];
 
 
sprintf(str,"this is screen %d",i);
 
 
wnd[i].show();
 
 
}
 
 
return app.exec();
 
 
}

 
DisplayFusion绿色版是一款由加拿大著名软件公司 Binary Fortress 精心设计开发的多屏幕管理工具,通过多显示器任务栏、任务栏按钮和可全面自定义的热键等强大功能,使得多显示器的管理工作更为简单高效。不论是电脑游戏休闲或者办公工程制图,如果您使用两个甚至更多的显示器,装一款这样的多屏管理器*实在。   通过使用 DisplayFusion 在每个显示器中添加一个任务栏,这样使得您的窗口管理更有条理。每个显示器上的任务栏都可配置为显示所有窗口,或者只显示位于该显示器中的窗口。通过按钮分组、自动隐藏、窗口预览、快捷键、开始按钮等功能帮您更轻松操作程序窗口。   DisplayFusion绿色版功能&特点:   多显示器任务栏 – 在每个的显示器加入任务栏使窗口保持轻松组织;   不可思议的桌面墙纸 – 从许多在线资源或使用自己收藏的图片轻松地使用令人赞叹的墙纸图片;   *的监视器控制 – *的设置和配置文件控制你的显示器;   窗口管理 – 轻松管理桌面窗口,使用内置功能或自己创建来调整大小或移动窗口到适合所需;   强大 Windows 8/8.1 调整 – 在窗口执行 Modern/Metro Apps 和其它伟大的调整使 Windows 8/8.1 的桌面更加友善;   实用 Windows 10 调整 – 自定义 Windows 10 满足您的需求,移动电源用户菜单(Win+X)到鼠标位置,隐藏 Windows 锁等功能;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值