2*2屏幕:

3*3屏幕:

4*4屏幕:

布局可以按照自己个性岁意思设计,你可以设计成1*2,1*5或者其他你喜欢的样式.

系统页面开发用的是QT,这个多分屏主要数据类型有两个VideoFerame,MeetingPlaceWidget,这是我简化后,保留的两个主要数据类型,通过整两个类就可以实现如上面的效果,但是在实际运用中,涉及到多屏幕,多分屏,以及数据流等,肯定还需要封装以及定义其他类结构。

1、VideoFrame

图片中每一个小块是一个VideoFrame,这个VideoFrame继承自QFrame.,他的属性应该包含所在屏幕,所在屏幕位置,视频流实际高度,视频流实际宽度,视频流大小,没接收东西显示的图片等。

2、MeetingPlaceWidget

接着需要定义一个代表每一个屏幕的类,比如定义为MeetingPlaceWidget,这个各个画面的布局显示,也就是决定到底是以2*2,还是3*3等。

一些主要代码如下:

定义布局格式数据结构

enum ConfRoomDisplayModel
{CF_DM_UNKNOWN = -1,     //未知布局CF_DM_1X1,CF_DM_2X2,CF_DM_3X3,CF_DM_L3X3,               //采用3X3的布局,左上角为大屏CF_DM_ALL,CF_DM_L4X4,               //采用4X4的布局,左上角为大屏CF_DM_L5X5,             //采用5X5的布局,左上角为大屏CF_DM_L1_5,             //采用3X3的布局,左上角为大屏CF_DM_L1_20,            //在1_5的基础上将第一个屏幕之外的所有窗口改成4个CF_DM_1X1_REAL,          //仍然采用的是1X1布局,但是根据视频流的实际大小显示视频窗口CF_DM_DOC,               //文档阅读布局CF_DM_AUTO,             //采用自动布局CF_DM_TOP_1_2,          //在屏幕的上半部显示1X2的布局CF_DM_4X4,              //采用4X4的布局,共16路CF_DM_AIRPLAY,CF_DM_3X1,
};

接下来实现各个布局,我们用一个类型为VideoFrame的链表保存各个块,然后进行布局。

2*2:

void MeetingPlaceWidget::size2And2()
{if (_displayModel == CF_DM_2X2) return;if (MeetingPlaceWidget::_displayModel != CF_DM_2X2){for (int i=0;i<memberFrames.size();i++){memberFrames[i]->hide();}int i;for (i=0;i<4;i++){int r = i/2;int c = i%2;mainLayout->addWidget(memberFrames[i],r,c);memberFrames[i]->show();}widget->setLayout(mainLayout);_ui->scrollArea->setWidget(widget);}_displayModel = CF_DM_2X2;
}

3*3:

void MeetingPlaceWidget::size3And3()
{if (_displayModel == CF_DM_3X3) return;for (int i=0;i<memberFrames.size();i++){memberFrames[i]->setHidden(true);}int i;for (i=0;i<9;i++){memberFrames[i]->setVisible(true);int r = i/3;int c = i%3;mainLayout->addWidget(memberFrames[i],r,c);}widget->setLayout(mainLayout);_ui->scrollArea->setWidget(widget);_displayModel = CF_DM_3X3;
}

4*4:

void QtMeetingPlaceWidget::sizeL4And4()
{if (_displayModel == CF_DM_L4X4) return;int i;for (i=0;i<8;i++){memberFrames[i]->setVisible(true);}for (i=8;i<memberFrames.size();i++){memberFrames[i]->setHidden(true);}mainLayout->addWidget(memberFrames[0],0,0,3,3);mainLayout->addWidget(memberFrames[1],0,3);mainLayout->addWidget(memberFrames[2],1,3);mainLayout->addWidget(memberFrames[3],2,3);mainLayout->addWidget(memberFrames[4],3,0);mainLayout->addWidget(memberFrames[5],3,1);mainLayout->addWidget(memberFrames[6],3,2);mainLayout->addWidget(memberFrames[7],3,3);widget->setLayout(mainLayout);_ui->scrollArea->setWidget(widget);_displayModel = CF_DM_L4X4;
}

视频会议系统——多分屏相关推荐

  1. 应用系统怎么开启审计功能_win10系统开启分屏功能的设置方法

    使用深度win10纯净版系统的用户,都知道win10系统里面都内置有分屏功能,分屏可以一台电脑使用两个桌面,可以让多个网页或者任务同时在一个窗口下显示,这样能够使我们提高工作效率.你还能在同一屏幕下一 ...

  2. 计算机分屏解决方案,win10系统实现分屏功能的还原方案

    有关win10系统实现分屏功能的操作方法想必大家有所耳闻.但是能够对win10系统实现分屏功能进行实际操作的人却不多.其实解决win10系统实现分屏功能的问题也不是难事,小编这里提示两点:1.首先我们 ...

  3. android 画中画 分屏 区别,小米MIUI系统手机分屏VS画中画功能,教你游戏聊天两不误...

    原标题:小米MIUI系统手机分屏VS画中画功能,教你游戏聊天两不误 MIUI9上曾经为我们带来了分屏功能,这项功能的加入,使得可以在一个屏幕上同时干两件不同的事情,例如同时聊QQ和微信,或者聊天的同时 ...

  4. 怎么开分屏_ios14分屏功能怎么开 苹果ios14系统有分屏功能吗

    ios14分屏功能怎么开 苹果ios14系统有分屏功能吗 iOS14已经正式发布了,但是很多小伙伴都不知道ios14分屏具体该怎么操作?这边小编给大家介绍下吧! ios14分屏操作教学一览: ios1 ...

  5. chrome android 分屏,谷歌调整安卓系统:分屏多任务同时支持两款以上APP

    原标题:谷歌调整安卓系统:分屏多任务同时支持两款以上APP 本月初,三星展示了自家的折叠屏手机方案,虽然看起来机身有点厚,但是屏幕直接的折叠设计,还是相当酷炫的. 除了手机外形,三星还在跟谷歌一起,为 ...

  6. linux系统 设置分屏,Linux桌面的4种可以分屏的终端

    终端分屏在很多情况下还是非常有用的.比如近来我在探索一个对话框工具 yad,就不得不多开几个终端窗口来测试,左边一个是yad命令的手册(man yad),右边一个是对 yad 进行的各种命令测试.如果 ...

  7. Linux系统终端分屏——实用小技巧

    一.使用screen分屏(只能上下分屏,不能左右分屏) 1. 安装工具 sudo apt-get install screen 2. 上下分屏 ctr + a 再按 shift + s 3. 切换屏幕 ...

  8. chrome android 分屏,谷歌调整安卓系统:分屏多任务同时支持两款以上APP!

    [PConline资讯]本月初,三星展示了自家的折叠屏手机方案,虽然看起来机身有点厚,但是屏幕直接的折叠设计,还是相当酷炫的. 除了手机外形,三星还在跟谷歌一起,为自家的折叠屏手机设计定制版的安卓系统 ...

  9. DOS系统里,分屏显示目录的命令是什么??

    dir /s dir /p dir /w 我记得这三个都是我当年常用的命令,有分瓶的,有滚动时候每页停顿的,还有去掉详细信息的吧,, 可以放在一起使用.如dir /p/w /p是滚动时候中间停顿的, ...

最新文章

  1. oracle查询指定行数间的记录
  2. 【Python实现数据可视化】创建3D柱状图
  3. 计算机操作系统——处理机调度算法
  4. Python使用ffmpeg下载m3u8拼接为视频
  5. json数据转换异常:net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
  6. 简单的聊天应用程序(多客户端聊天服务器) from multithread
  7. 理解 Android 本地数据存储 API
  8. 数据仓库模型(星型模型和雪花模型 )
  9. c语言线性表-顺序表(完整版)
  10. 台式计算机如何连接vif,电脑各种接口规范
  11. vue使用高德地图获取当前经纬度
  12. 阿辉DirectX 11学习笔记二
  13. python多变量相关性分析_两个变量与因变量相关性分析_spss多变量相关性分析
  14. 对于提高团队开会效率的看法
  15. 云服务器被恶意ddos攻击了怎么办?
  16. JS实现双人五子棋简易游戏(上)
  17. YYC采集工具python语言精简方便实用的视频采集工具
  18. Excel2007无法卸载:安装程序包的语言不受系统支持。微软的卸载程序也不行。——只能手工删除
  19. Gameplay - 设计使命召唤类型的关卡
  20. 配备Apple T2 安全芯片的 Mac 机型及T2芯片mac电脑U盘装系统教程

热门文章

  1. 第12期 《顿开金锁走蛟龙》2月刊
  2. POJ 4110:圣诞老人的礼物-Santa Clau’s Gifts
  3. (超详细)JAVA SE开发工具包(JDK)在Windows系统中的下载、安装和配置的方法
  4. UIColor RGB颜色对照表
  5. Python抓取糗事百科成人版图片
  6. 我的Android前生今世之缘-学习经验-安卓教程(六)
  7. Nginx下本机多项目虚拟主机配置[一个端口多个站点]
  8. Github 之删除文件或者文件夹(不影响本地文件,只删除远端的指定文件或者文件夹) 操作
  9. spritekit 动画_iOS SpriteKit 游戏
  10. 猛犸创始人季逸超:互联网新人类