一个支持多屏显示的程序

    xiaoxiao2026-06-16  5

    原文地址:http://blog.sina.com.cn/s/blog_4868f98601019odo.html 。感谢作者,如果造成任何不便,请联系我删除。 最近要用到多屏显示。 多屏显示的原理其实很好理解,就拿横向扩展来说: 计算机把桌面的 宽度扩展成了 w1(屏幕1的宽度) + w2(屏幕2的宽度) 。 当一个窗口的起始横坐标 > w1,则 他就被显示在第二个屏幕上了。 qt的说明文档中用一张图阐述了这个情况: 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(); }
    转载请注明原文地址: https://ju.6miu.com/read-1310577.html
    最新回复(0)