找回密码
 立即注册
收起左侧

Qt编写数据可视化大屏界面电子看板5-恢复布局

0
回复
88
查看
[复制链接]
累计签到:7 天
连续签到:1 天
来源: 2019-5-16 10:23:37 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一、前言
恢复布局这个功能在整个数据可视化大屏界面电子看板系统中非常有用,很多时候不小心把现有布局拖**了,(当然如果不想布局被拖动改动,可以修改配置文件中的MoveEnable参数来控制,默认为真表示可以任意拖动布局,后期如果不想再被拖动可以设置为假。)人总归有不小心的时候,一旦不小心拖动了布局,则可以在软件没有退出之前恢复,鼠标右键菜单增加恢复布局这个功能就很有必要了,在保存布局以前,单击这个恢复布局,会自动恢复到当前布局的初始状态,如果不小心保存布局了,那就只能重新新建布局了,或者如果布局有备份的话就更好。恢复布局只能对当前布局进行恢复,而且是在未保存布局以前,以后就麻烦。

二、电子看板介绍
电子看板是目视化管理的一种表现形式,即对数据的状况一目了然地表现,主要是对于管理项目,它通过利用形象直观而又色彩适宜的各种视觉感知信息来组织现场生产活动,目视管理依据人类的生理特征,在生产现场充分利用信号灯、标识牌、符号颜色等方式来发出视觉信号,鲜明准确地刺激人的神经末梢,快速地传递信息,形象直观地将潜在的问题和浪费现象都显现出来。以便任何人都可以及时掌握管理现状和必要的情报,从而能够快速制定并实施应对措施。因此,管理看板是发现问题、解决问题的非常有效且直观的手段,是优秀的现场管理必不可少的工具之一。

三、功能特点
1. 整体总共分3J界面,一级界面是整体布局,二级界面是单个功能模块,3J界面是单个控件。
2. 子控件包括饼图+圆环图+曲线图+柱状图+柱状分组图+横向柱状图+横向柱状分组图+合格率控件+百分比控件+进度控件+设备状态面板+表格数据+地图控件(包括动态闪烁点+迁徙图等)+视频控件+其他控件等。
3. 二级界面可以自由拖动悬浮,支持最小化最大化关闭,响应双击自定义标题栏。
4. 数据源支持数据库采集(默认)、网络通信、网络请求等,可自由设定每个子界面的采集间隔即数据刷新频率。
5. 采用纯QWidget编写,支持Qt4.6到Qt5.12.3任何版本,支持嵌入式linux比如树莓派、香橙派、全志、imx6等。
6. 提供三个内核版本,自定义控件版本+qchart版本+echart版本。
7. 内置多套配色风格样式,默认紫色,支持任何分辨率。
8. 可设置标题+目标分辨率+布局方案,启动立即应用。
9. 可设置主背景颜色+面板颜色+十字线游标颜色。
10. 可设置多条曲线颜色,没有设置颜色的情况下内置15套精美颜色随机应用。
11. 可设置标题栏背景颜色+文字颜色。
12. 可设置曲线图表背景颜色+文字颜色+网格颜色。
13. 可设置正常颜色+警戒颜色+报警颜色+禁用颜色+百分比进度颜色。
14. 可分别设置各种字体大小,比如全局+软件名称+标题栏+子标题栏+加粗标签等。
15. 可设置标题栏高度+表头高度+行高度。
16. 曲线支持游标+悬停高亮数据点和显示值,柱状图支持顶部(可设置顶端+上部+中间+底部)显示数据,全部自适应计算位置。
17. 主界面直接鼠标右键切换布局+配色方案+关闭开启某个二级窗体。
18. 自动记忆所有子窗口的大小和位置,下次启动立即应用。
19. 动态加载布局方案菜单,可以动态新建布局、恢复布局、保存布局、另存布局等,用户可以制造任意布局。
20. 二级窗体,双击从主窗体分离出来浮动,可以自由调整大小。再次双击标题栏最大化,再次双击还原。
21. 每个模块都可以自定义采集速度,如果是数据库采集会自动排队处理。

五、特别说明
1. 可执行文件同级文件夹有layout+layout_1440+layout_1920,程序默认自动识别分辨率并加载对应的布局文件夹,比如1920分辨率则从layout_1920文件夹加载布局,并作为整体布局文件夹。
2. 程序默认是模拟数据,如果需要从数据库采集则修改配置文件WorkMode=db即可。
3. 如果发现布局拖**了,可以直接鼠标右键选择恢复布局即可,在保存布局以前。
4. 在中间地图模块鼠标右键可以弹出菜单,切换布局和配色方案等。
5. 在模块的标题栏上右键可以弹出默认的dock菜单,用来显示和隐藏各模块。
6. 软件关闭过程中会自动保存布局,下次启动以后自动应用。
7. 如果使用的默认的默认的配色方案比如紫色风格,则配置文件中的颜色全部无效,会自动应用代码中的颜色,如果需要启用自定义的颜色,则将配置文件的 Theme=\x81ea\x5b9a\x4e49\x98ce\x683c 即可。此时打开软件会应用配置文件中的颜色。
8. 右键菜单可以截图保存,默认命名为 配色方案名称_布局方案名称.png 保存在snap目录下。
9. 如果是XP系统请先执行fixff.cmd,用来修复ffmpeg在XP上不可用的BUG。
10. 可执行文件下载地址:https://pan.baidu.com/s/1o97IGvZgTgDhlkuXQa4B0w 提取码:r2bv ,会不定期更新程序,欢迎各位提出批评和建议。

六、效果图


七、核心代码
  1. void MainWindow::changeLayout(const QString &layout, bool init)
  2. {
  3.     //首次加载不需要比较是否和配置文件一样
  4.     bool needLoad = init;
  5.     if (!init && App::Layout != layout) {
  6.         needLoad = true;
  7.         //先保存原有布局
  8.         saveLayout(App::Layout, 2);
  9.     }

  10.     if (needLoad) {
  11.         App::Layout = layout;
  12.         App::writeConfig();
  13.         this->clearWidget();
  14.         this->initWidget();
  15.         this->initLayout(App::Layout);

  16.         //全屏+QWebEngineView控件一起会产生右键菜单无法弹出的BUG,需要上移一个像素
  17.         QRect rect = qApp->desktop()->screenGeometry();
  18. #if 1
  19.         rect.setY(-1);
  20.         rect.setHeight(rect.height());
  21. #else
  22.         rect.setX(30);
  23.         rect.setY(40);
  24.         rect.setWidth(1370);
  25.         rect.setHeight(795);
  26. #endif
  27.         this->setGeometry(rect);
  28.     }
  29. }

  30. void MainWindow::initLayout(const QString &layout)
  31. {
  32.     QString file = QString("%1/%2.ini").arg(App::LayoutPath).arg(layout);
  33.     QSettings set(file, QSettings::IniFormat);
  34.     set.beginGroup("MainWindow");
  35.     restoreState(set.value("State").toByteArray());
  36.     set.endGroup();
  37. }

  38. //type: 0-新建布局 1-恢复布局 2-保存布局 3-布局另存
  39. void MainWindow::saveLayout(const QString &layout, int type)
  40. {
  41.     //如果为空则表示是恢复布局
  42.     if (type == 0) {
  43.         App::Layout = layout;
  44.         this->changeLayout(App::Layout, true);
  45.         return;
  46.     } else if (type == 1) {
  47.         this->changeLayout(App::Layout, true);
  48.         return;
  49.     }

  50.     QString file = QString("%1/%2.ini").arg(App::LayoutPath).arg(layout);
  51.     QSettings set(file, QSettings::IniFormat);
  52.     set.beginGroup("MainWindow");
  53.     set.setValue("State", saveState());
  54.     set.endGroup();

  55.     App::Layout = layout;
  56.     App::writeConfig();
  57. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册