随着时代的进入,人们对屏幕早已习以为常。所以大家追求越来越大的屏幕,确实大屏给人的震撼感很强。大屏通常是使用众多小屏幕拼接组成的,计算机多屏显示通常有扩展模式、复制模式。
:所有屏幕一字排开,组成长条形(宽*n - 高)屏幕,如下所示:
:所有屏幕显示相同的画面
将屏幕接好之后,打开设置可以设置屏幕模式:
#include <QDesktopWidget> //获取屏幕信息 QDesktopWidget* desktop = QApplication::desktop(); //获取屏幕对象(这个函数必须在创建了 QApplication 对象之后才能使用, 否则会出错) int screenNum = desktop->screenCount(); //获取屏幕个数 int mainScreenID = desktop->primaryScreen(); //获取主屏幕索引,(windows开始菜单所在的屏幕为主屏幕),每个副屏幕序号+1 QRect screenRect = desktop->screenGeometry(int screen_index); //根据屏幕索引获取屏幕宽高等属性 int screenWidth = desktop->width(); //获取屏幕的宽 int screenWidth = desktop->height(); //获取屏幕的高 for(int i=0; i<screenNum; ++i) { //获取每块屏幕分辨率 qDebug()<<"屏幕"<<i+1<<"分辨率: "<<desktop->screenGeometry(i).size(); } //====================================================================== //设置对话框mdlg显示在副屏1的左上角坐标 QDialog mdlg; mdlg.setGeometry(desktop->screenGeometry(1)); mdlg.show(); //====================================================================== //如果想全屏显示在副屏1,则可以获取副屏1的分辨率,更新对话框的大小再设置坐标 mdlg.resize(desktop->screenGeometry(1).size()); //设置对话框全屏 mdlg.setGeometry(desktop->screenGeometry(1)); //设置对话框对齐副屏1左上角坐标 mdlg.show(); //======================================================================
最近写一个qt程序在一台电脑上,两个屏幕显示程序,主屏幕用来控制,第二屏幕用来显示视频,现在将网上收集的一些资料汇总一下。
收集资料一:
感谢作者分享,转载自:http://blog.sina.com.cn/s/blog_4868f98601019odo.html
如果造成任何不便,请联系我删除。
最近要用到多屏显示。
多屏显示的原理其实很好理解,就拿横向扩展来说:
计算机把桌面的 宽度扩展成了 w1(屏幕1的宽度) + w2(屏幕2的宽度) 。
当一个窗口的起始横坐标 > w1,则 他就被显示在第二个屏幕上了。
qt的说明文档中用一张图阐述了这个情况:
注意 ,这个函数必须在创建了 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(); }
收集资料二:
感谢作者分享,转载自:http://blog.sina.com.cn/s/blog_4e7e25c20102v0oy.html
如果造成任何不便,请联系我删除。
想实现这样一种功能:主程序的主窗口在PC上显示,而其子dialog在另外的显示器上显示(做实验时方便监控且不会有多余的干扰)。
方法如下 :建立Qdesktopwidget对象
QDesktopWidget* desktop = Application::desktop();
获取当前显示器的个数
N = desktop->screenCount();
如果有两个显示,则N=2,qt默认的计算机主机的index = 0,外接显示器的index = 1;
QDialog 有个成员函数叫setGeometry,只需要将dialog对象的Geometry设置为index为1的显示器即可,默认为0.如果要显示的dialog的对象为mdlg,则
mdlg.setGeometry(desktop->screenGeometry(1));
mdlg.show();
联系客服