一个支持多屏显示的程序

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

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

一个支持多屏显示的程序_第1张图片


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 
 
   
#include 
 
   
#include 
 
   
#include 
 
   
 
   
 
   
 
   
 
   
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 ;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();
 
   
}

 
  

你可能感兴趣的:(QT)