From 015b41dda1f03e5812e3e1d8131b5093c768c8ef Mon Sep 17 00:00:00 2001 From: feiyangqingyun Date: Fri, 8 Jul 2022 17:23:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/bigscreen/index.html | 6 +++--- docs/bigscreen/snap/4-6-3.jpg | Bin 20754 -> 14800 bytes 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/bigscreen/index.html b/docs/bigscreen/index.html index 1c4fb18..4d3bc5b 100644 --- a/docs/bigscreen/index.html +++ b/docs/bigscreen/index.html @@ -671,8 +671,8 @@ header, .context-menu, .megamenu-content, footer{ 可视化大屏系统开发及使用手册
-
  • 0 前言说明

    0.1 编译说明

    1. 编译后可执行文件在和源码文件夹同级目录的bin文件夹下,配置文件bigscreen.ini文件在可执行文件所在目录下的config文件夹下,数据库文件在可执行文件所在目录下的db文件夹下。
    2. 编译后记得将源码下的file目录下(切记是file目录下而不是file目录)的所有文件复制到可执行文件同一目录。
    3. 大屏中用到了视频监控模块,所以还需要拷贝ffmpeg的动态库文件到可执行文件同一目录,编译成功后记得将dll_ffmpeg4(64位的构建套件对应的是dll_ffmpeg4_64)对应目录下的库复制到可执行文件同一目录。如果是linux系统则那些exe和dll都不需要拷贝,那个是ffmpeg对应win的运行库,linux上采用的静态库。
    4. dll+lib 链接: https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA 提取码: ujm7。
    5. 如果程序异常结束并提示 miniblink.dll 文件不存在请先拷贝,你还需要在dll+lib下载地址的地方找到 dll_miniblink.zip 下载并解压出来拷贝文件到可执行文件目录。一般这个是因为你用的mingw编译器,win+qt5.6以上+mingw编译器,没有浏览器控件,采用的miniblink第三方浏览器控件。
    6. 如果是linux系统,记得将ffmpeg目录下的linuxlib 找到你系统的版本位数,将文件夹版本位数去掉,比如你操作系统是ubuntu16.04 64位的,则将linuxlib16.04.64改成linuxlib即可,这些是ffmpeg对应linux系统的静态库。
    7. 当然你也可以选择不启用视频监控模块,只需要将pro中的videoffmpeg改成videoffmpeg1即可。
    8. 目录下的bigscreen.sql为数据库脚本,可以在系统设置中单击初始化数据来执行。bigscreen_mysql.sql脚本为Navicat工具对应的导入脚本。
    9. 如果发现地图打不开,请先确认file目录下的所有文件有没有拷贝过去,还有就是将MapBaiDu::Instance()->setSaveFile(false); 改成true;
    10. 如果是用vs+qt可能报错 error LNK2026: 模块对于 SAFESEH 映像是不安全的。
    • 第一步:打开该项目的“属性页”对话框。
    • 第二步:单击“链接器”文件夹。
    • 第三步:单击“命令行”属性页。
    • 第四步:将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用。

    0.2 版本说明

    V20220417

    1. 设备状态监测增加进度条控件,每个设备都有一个进度条对应完成进度。
    2. 设备状态数据库增加字段progress存储进度,flicker控制是否闪烁,1表示闪烁。
    3. 增加大量的代码注释。

    V20211015

    1. 修正停靠窗体鼠标右键弹出菜单复选框样式、右键菜单子菜单三角形图标样式。
    2. 修正全局复选框样式,比如用户管理中勾选用户权限。
    3. 顶部banner改成透明度20%,这样自适应多种背景颜色风格。
    4. 图片文件夹将image改成了image_bigscreen,以便和其他系统区分。
    5. 布局文件夹将layout改成了layout_bigscreen,以便和其他系统区分。
    6. 默认布局文件夹是1920x1080分辨率。用户可以自己在不同分辨率下调整好布局生成布局文件,然后拷贝布局文件夹进行备份。
    7. 将其他几种分辨率布局文件夹删除,去掉了这种机制,后期采用不同用户对应不同布局文件夹的形式。
    8. 将相关文档和布局文件移动到源码下的doc目录。
    9. 系统设置新增全屏模式参数,默认全屏,不全屏则采用最大化显示,有些系统为了不遮挡任务栏需要最大化显示,也方便截图。
    10. 增加悬浮窗体分隔条样式,限定宽度和颜色等。

    V20210323

    1. 编写开发和使用说明书。
    2. 系统设置增加视频拉伸、视频循环播放等配置参数。
    3. 增加多屏幕支持,自动识别多个屏幕。
    4. 新增2K分辨率布局文件夹。
    5. 增加示例自定义添加多个窗体。
    6. 重新设计配置参数界面,重新拆分配置参数分组,使得更清晰明了。
    7. 新增停靠窗体默认尺寸占比,这样在没有布局文件以及新建布局文件的时候自动按照这个尺寸设置停靠窗体的位置,之前没有布局文件默认是挤在一块的。
    8. 配置文件密码改成密文存储。

    0.3 相关站点

    1. 国内站点:https://gitee.com/feiyangqingyun
    2. 国际站点:https://github.com/feiyangqingyun
    3. 个人主页:https://blog.csdn.net/feiyangqingyun
    4. 知乎主页:https://www.zhihu.com/people/feiyangqingyun
    5. 产品主页:https://blog.csdn.net/feiyangqingyun/article/details/97565652
    6. 在线文档:https://feiyangqingyun.gitee.io/qwidgetdemo/bigscreen/
    7. 体验地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码:01jf 文件名:bin_bigscreen.zip。
    8. 文章导航:https://qtchina.blog.csdn.net/article/details/121327452

    0.4 功能特点

    1. 采用分层设计,整体总共分三级界面,一级界面是整体布局,二级界面是单个功能模块,三级界面是单个控件。
    2. 子控件包括饼图、圆环图、曲线图、柱状图、柱状分组图、横向柱状图、横向柱状分组图、合格率控件、百分比控件、进度控件、设备状态面板、表格数据、地图控件、视频控件等。
    3. 二级界面可以自由拖动悬浮,支持最小化隐藏、最大化关闭、响应双击自定义标题栏。
    4. 数据源支持模拟数据(默认)、数据库采集、串口通信(需定制)、网络通信(需定制)、网络请求等,可自由设定每个子界面的采集间隔即数据刷新频率。
    5. 采用纯QWidget编写,亲测Qt4.6到Qt6.2任意版本,理论上支持后续其他Qt版本。
    6. 超强跨平台,亲测windows、linux、mac、国产uos、国产银河麒麟kylin等系统,效果完美,同时还支持嵌入式linux比如树莓派、香橙派、全志、imx6等。
    7. 同时集成了自定义控件、qchart饼图、echart地图等功能。
    8. 内置多套配色风格样式(紫色、蓝色、深蓝、黑色),默认紫色,自适应任意分辨率。
    9. 可设置系统标题、目标分辨率、布局方案,启动立即应用。
    10. 可设置主背景颜色、面板颜色、十字线游标颜色等各种颜色。
    11. 可设置多条曲线不同颜色,没有设置颜色的情况下内置多套精美颜色随机应用。
    12. 可设置标题栏背景颜色、文字颜色。
    13. 可设置曲线图表背景颜色、文字颜色、网格颜色。
    14. 可设置正常颜色、警戒颜色、报警颜色、禁用颜色、百分比进度颜色。
    15. 可分别设置各种字体大小,比如全局字体、软件名称、标题栏、子标题栏、加粗标签等。
    16. 可设置标题栏高度、表头高度、行高度。
    17. 曲线支持游标、定位线、悬停高亮数据点、悬停显示值。
    18. 柱状图支持顶部(可设置顶端、上部、中间、底部)显示数据,全部自适应计算位置。
    19. 支持平滑曲线,内置多种平滑曲线算法,还支持面积图平滑。
    20. 面积图填充颜色可选多种规则比如单色透明度填充、透明度渐变填充等。
    21. 数据库支持sqlite、mysql、postgresql、oracle、国产人大金仓等数据库。
    22. 主界面直接鼠标右键切换布局、配色方案、关闭开启某个二级窗体。
    23. 自动记忆所有子窗口的大小和位置,下次启动立即应用。
    24. 动态加载布局方案菜单,可以动态新建布局、恢复布局、保存布局、另存布局等,用户可以制造任意布局。
    25. 二级窗体,双击从主窗体分离出来浮动,可以自由调整大小。再次双击标题栏最大化,再次双击还原。
    26. 子模块也可以全屏显示作为一个大屏,这样就可以一个大屏拓展出多个子大屏,放大查看子模块的数据详情,适用多屏展示。
    27. 每个模块都可以自定义采集速度,如果是数据库采集会自动排队处理,后期还可以拓展每个子模块都独立的数据库采集。
    28. 提供系统设置模块进行整体的配置参数设置,效果立即应用。
    29. 提供精美炫酷的大屏地图模块,包括静态图片、闪烁效果、迁徙效果、世界地图、区域地图等,可指定点的经纬度坐标,识别单击响应,可以做地图跳转等,每个点都可以不同的颜色和提示信息。
    30. 除了提供大屏系统外,还将每个模块都做了独立的模块示例界面,每个模块都可以独立学习使用,里面用到的控件也单独做了控件示例界面,方便学习每个控件如何使用。
    31. 非常详细的开发和使用手册,其中包括数据库说明、模块对照图、控件对照图、项目结构、代码说明(精确到每个类)、演示demo、使用方法等。

    1 操作说明

    1.1 使用方法

      系统支持多种数据源,比如数据库采集、http请求、串口通信、网络通信、模拟数据等,为了简化测试过程,默认内置采用的是模拟数据。

    1.1.1 启动窗体

      系统内置了多种启动窗体,默认大屏系统,可以通过鼠标右键菜单进入系统设置,启动窗体下拉框选择进行切换,切换后会自动重启应用,还可选择控件演示、模块演示,在控件演示和模块演示窗体中,左侧是对应子窗体导航,会自动记住最后选中的子界面索引。 -

    1.1.1.1 大屏系统

    1.1.1.2 模块演示

    1.1.1.3 控件演示

    1.1.2 系统菜单

    +

  • 0 前言说明

    0.1 编译说明

    1. 编译后可执行文件在和源码文件夹同级目录的bin文件夹下,配置文件bigscreen.ini文件在可执行文件所在目录下的config文件夹下,数据库文件在可执行文件所在目录下的db文件夹下。
    2. 编译后记得将源码下的file目录下(切记是file目录下而不是file目录)的所有文件复制到可执行文件同一目录。
    3. 大屏中用到了视频监控模块,所以还需要拷贝ffmpeg的动态库文件到可执行文件同一目录,编译成功后记得将dll_ffmpeg4(64位的构建套件对应的是dll_ffmpeg4_64)对应目录下的库复制到可执行文件同一目录。如果是linux系统则那些exe和dll都不需要拷贝,那个是ffmpeg对应win的运行库,linux上采用的静态库。
    4. dll+lib 链接: https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA 提取码: ujm7。
    5. 如果程序异常结束并提示 miniblink.dll 文件不存在请先拷贝,你还需要在dll+lib下载地址的地方找到 dll_miniblink.zip 下载并解压出来拷贝文件到可执行文件目录。一般这个是因为你用的mingw编译器,win+qt5.6以上+mingw编译器,没有浏览器控件,采用的miniblink第三方浏览器控件。
    6. 如果是linux系统,记得将ffmpeg目录下的linuxlib 找到你系统的版本位数,将文件夹版本位数去掉,比如你操作系统是ubuntu16.04 64位的,则将linuxlib16.04.64改成linuxlib即可,这些是ffmpeg对应linux系统的静态库。
    7. 当然你也可以选择不启用视频监控模块,只需要将pro中的videoffmpeg改成videoffmpeg1即可。
    8. 目录下的bigscreen.sql为数据库脚本,可以在系统设置中单击初始化数据来执行。bigscreen_mysql.sql脚本为Navicat工具对应的导入脚本。
    9. 如果发现地图打不开,请先确认file目录下的所有文件有没有拷贝过去,还有就是将MapBaiDu::Instance()->setSaveFile(false); 改成true;
    10. 如果是用vs+qt可能报错 error LNK2026: 模块对于 SAFESEH 映像是不安全的。
    • 第一步:打开该项目的“属性页”对话框。
    • 第二步:单击“链接器”文件夹。
    • 第三步:单击“命令行”属性页。
    • 第四步:将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用。

    0.2 版本说明

    V20220417

    1. 设备状态监测增加进度条控件,每个设备都有一个进度条对应完成进度。
    2. 设备状态数据库增加字段progress存储进度,flicker控制是否闪烁,1表示闪烁。
    3. 增加大量的代码注释。

    V20211015

    1. 修正停靠窗体鼠标右键弹出菜单复选框样式、右键菜单子菜单三角形图标样式。
    2. 修正全局复选框样式,比如用户管理中勾选用户权限。
    3. 顶部banner改成透明度20%,这样自适应多种背景颜色风格。
    4. 图片文件夹将image改成了image_bigscreen,以便和其他系统区分。
    5. 布局文件夹将layout改成了layout_bigscreen,以便和其他系统区分。
    6. 默认布局文件夹是1920x1080分辨率。用户可以自己在不同分辨率下调整好布局生成布局文件,然后拷贝布局文件夹进行备份。
    7. 将其他几种分辨率布局文件夹删除,去掉了这种机制,后期采用不同用户对应不同布局文件夹的形式。
    8. 将相关文档和布局文件移动到源码下的doc目录。
    9. 系统设置新增全屏模式参数,默认全屏,不全屏则采用最大化显示,有些系统为了不遮挡任务栏需要最大化显示,也方便截图。
    10. 增加悬浮窗体分隔条样式,限定宽度和颜色等。

    V20210323

    1. 编写开发和使用说明书。
    2. 系统设置增加视频拉伸、视频循环播放等配置参数。
    3. 增加多屏幕支持,自动识别多个屏幕。
    4. 新增2K分辨率布局文件夹。
    5. 增加示例自定义添加多个窗体。
    6. 重新设计配置参数界面,重新拆分配置参数分组,使得更清晰明了。
    7. 新增停靠窗体默认尺寸占比,这样在没有布局文件以及新建布局文件的时候自动按照这个尺寸设置停靠窗体的位置,之前没有布局文件默认是挤在一块的。
    8. 配置文件密码改成密文存储。

    0.3 相关站点

    1. 国内站点:https://gitee.com/feiyangqingyun
    2. 国际站点:https://github.com/feiyangqingyun
    3. 个人主页:https://blog.csdn.net/feiyangqingyun
    4. 知乎主页:https://www.zhihu.com/people/feiyangqingyun
    5. 产品主页:https://blog.csdn.net/feiyangqingyun/article/details/97565652
    6. 在线文档:https://feiyangqingyun.gitee.io/qwidgetdemo/bigscreen/
    7. 体验地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码:01jf 文件名:bin_bigscreen.zip。
    8. 文章导航:https://qtchina.blog.csdn.net/article/details/121327452

    0.4 功能特点

    1. 采用分层设计,整体总共分三级界面,一级界面是整体布局,二级界面是单个功能模块,三级界面是单个控件。
    2. 子控件包括饼图、圆环图、曲线图、柱状图、柱状分组图、横向柱状图、横向柱状分组图、合格率控件、百分比控件、进度控件、设备状态面板、表格数据、地图控件、视频控件等。
    3. 二级界面可以自由拖动悬浮,支持最小化隐藏、最大化关闭、响应双击自定义标题栏。
    4. 数据源支持模拟数据(默认)、数据库采集、串口通信(需定制)、网络通信(需定制)、网络请求等,可自由设定每个子界面的采集间隔即数据刷新频率。
    5. 采用纯QWidget编写,亲测Qt4.6到Qt6.2任意版本,理论上支持后续其他Qt版本。
    6. 超强跨平台,亲测windows、linux、mac、国产uos、国产银河麒麟kylin等系统,效果完美,同时还支持嵌入式linux比如树莓派、香橙派、全志、imx6等。
    7. 同时集成了自定义控件、qchart饼图、echart地图等功能。
    8. 内置多套配色风格样式(紫色、蓝色、深蓝、黑色),默认紫色,自适应任意分辨率。
    9. 可设置系统标题、目标分辨率、布局方案,启动立即应用。
    10. 可设置主背景颜色、面板颜色、十字线游标颜色等各种颜色。
    11. 可设置多条曲线不同颜色,没有设置颜色的情况下内置多套精美颜色随机应用。
    12. 可设置标题栏背景颜色、文字颜色。
    13. 可设置曲线图表背景颜色、文字颜色、网格颜色。
    14. 可设置正常颜色、警戒颜色、报警颜色、禁用颜色、百分比进度颜色。
    15. 可分别设置各种字体大小,比如全局字体、软件名称、标题栏、子标题栏、加粗标签等。
    16. 可设置标题栏高度、表头高度、行高度。
    17. 曲线支持游标、定位线、悬停高亮数据点、悬停显示值。
    18. 柱状图支持顶部(可设置顶端、上部、中间、底部)显示数据,全部自适应计算位置。
    19. 支持平滑曲线,内置多种平滑曲线算法,还支持面积图平滑。
    20. 面积图填充颜色可选多种规则比如单色透明度填充、透明度渐变填充等。
    21. 数据库支持sqlite、mysql、postgresql、oracle、国产人大金仓等数据库。
    22. 主界面直接鼠标右键切换布局、配色方案、关闭开启某个二级窗体。
    23. 自动记忆所有子窗口的大小和位置,下次启动立即应用。
    24. 动态加载布局方案菜单,可以动态新建布局、恢复布局、保存布局、另存布局等,用户可以制造任意布局。
    25. 二级窗体,双击从主窗体分离出来浮动,可以自由调整大小。再次双击标题栏最大化,再次双击还原。
    26. 子模块也可以全屏显示作为一个大屏,这样就可以一个大屏拓展出多个子大屏,放大查看子模块的数据详情,适用多屏展示。
    27. 每个模块都可以自定义采集速度,如果是数据库采集会自动排队处理,后期还可以拓展每个子模块都独立的数据库采集。
    28. 提供系统设置模块进行整体的配置参数设置,效果立即应用。
    29. 提供精美炫酷的大屏地图模块,包括静态图片、闪烁效果、迁徙效果、世界地图、区域地图等,可指定点的经纬度坐标,识别单击响应,可以做地图跳转等,每个点都可以不同的颜色和提示信息。
    30. 除了提供大屏系统外,还将每个模块都做了独立的模块示例界面,每个模块都可以独立学习使用,里面用到的控件也单独做了控件示例界面,方便学习每个控件如何使用。
    31. 非常详细的开发和使用手册,其中包括数据库说明、模块对照图、控件对照图、项目结构、代码说明(精确到每个类)、演示demo、使用方法等。

    1 操作说明

    1.1 使用方法

      系统支持多种数据源,比如数据库采集、http请求、串口通信、网络通信、模拟数据等,为了简化测试过程,默认内置采用的是模拟数据。

    1.1.1 启动窗体

      系统内置了多种启动窗体,默认大屏系统,可以通过鼠标右键菜单进入系统设置,启动窗体下拉框选择进行切换,切换后会自动重启应用,还可选择控件演示、模块演示,在控件演示和模块演示窗体中,左侧是对应子窗体导航,会自动记住最后选中的子界面索引。 +

    1.1.1.1 大屏系统

    1.1.1.2 模块演示

    1.1.1.3 控件演示

    1.1.2 系统菜单

    在大屏的顶部中间标题栏或者子模块以外的标题栏,鼠标右键弹出的是系统的菜单,包括布局切换和样式切换等。

    1.1.3 模块菜单

    在模块的标题栏,鼠标右键弹出的是模块可视化的菜单,这个是Qt内置生成的,加载了多少个子模块就会生成多少个菜单项,可以对每个模块进行显示隐藏切换。

    1.1.4 布局切换

    在弹出的系统菜单选择布局方案,在弹出的二级菜单选择默认已经设置好的布局方案,直接切换即可。

    1.1.5 新建布局

    在弹出的系统菜单选择新建布局,在弹出的框中输入布局名称,确认后,自由拖动调整模块位置,打开模块、隐藏模块,之后单击保存布局即可。

    1.1.6 全局换肤

    在弹出的系统菜单选择配色方案,在弹出的二级菜单选择对应的配色方案,默认有四种:紫色风格、蓝色风格、深蓝风格、黑色风格。

    1.1.7 模块拖动

    鼠标移动到子模块的标题栏,鼠标按下可以拖动这个模块到任意位置,模块也可以拖动独立位置展示,也可以嵌入到对应布局中,拖动好位置以后自动保存到布局方案,下次启动自动应用。双击模块标题栏可以剥离窗体使之悬浮。

    1.1.8 调整间距

    鼠标移动到模块与模块的边缘,鼠标变成调整间距样式,可以左右或者上下拉动,调整好间距以后自动保存到布局方案,下次启动自动应用。

    1.2 系统设置

    系统设置中的参数,可能会不定期做调整和修改及增加,下面的图示和参数描述未必全部一致,以最新的为准。

    1.2.1 基本设置

    参数说明

    1. 开机启动:默认关闭,开启后软件会随系统启动而启动。
    2. 模块拖动:默认开启,开启后模块可以自由拖动到合适的位置松开,一般在布局固定后在关闭,防止使用者在现场又托乱了。
    3. 切左下角:开启裁掉左下角以后,左侧底部和整体底部合并为一体,作为全局底部的一部分,就可以拖动模块到左侧底部,否则左侧底部作为左侧的一部分。
    4. 切右下角:开启裁掉右下角以后,右侧底部和整体底部合并为一体,作为全局底部的一部分,就可以拖动模块到右侧底部,否则右侧底部作为右侧的一部分。
    5. 定位线条:系统中曲线图表内置了定位线条,比如1月份,方便查看,可以开启。
    6. 百分符号:系统中曲线图表Y轴,有时候需要按照 100% 后面带百分比符号显示。
    7. 隐藏鼠标:鼠标未操作多久自动隐藏鼠标指针,默认5秒钟。
    8. 启动窗体:选择程序运行的启动窗体,默认大屏系统,还可选择控件演示、模块演示。
    9. 工作模式:默认工作模式是模拟数据,还可以选择数据库采集、串口采集(未实现)、网络采集(未实现)、网络请求。
    10. 地图样式:可选择静态图片、闪烁效果、迁徙效果、世界地图、区域地图多种样式,如果没有开启浏览器模块则自动采用静态图片的方式,区域地图默认是江西省吉安市,可以在代码中修改。
    11. 布局方案:和系统右键菜单中的布局方案功能一样。
    12. 软件标题:软件的标题文字,显示在软件中间顶部。
    13. 请求地址:工作模式选择网络请求的时候发送的网络请求地址。

    1.2.2 视频设置

    参数说明

    1. 视频循环:开启后设定的视频打开后会循环播放。
    2. 视频拉伸:开启后视频会填充整个窗体拉伸图像,否则按照比例自动拉伸。
    3. 视频回调:开启后采用CPU绘制图像,部分设备没有GPU需要开启。
    4. 视频循环:开启后会不断循环播放视频文件。
    5. 视频地址:视频窗体对应的视频地址,可以下拉选择内置的一些地址,也可以手动填写,如果多个视频窗口则自己增加对应的配置参数,支持本地视频文件、USB摄像头、网络摄像头、视频流地址等各种。

    1.2.3 采集间隔设置

    采集间隔设置不用做说明,一看就懂,单位毫秒,可定制每个模块都对应自己的采集方式、数据库、间隔等。

    1.2.4 数据库设置

    理论上支持Qt支持的所有数据库,和具体程序无关,只要有对应的数据库的动态库和插件库就行,或者支持odbc数据源也可以,程序打通了odbc数据源的通信方式,所以支持各种数据库,可以先自己用对应的数据库工具连接数据库试试,通了数据库正常后在来测试程序。

    亲测 Sqlite(Qt内置无需额外动态库)、MySql(高版本Qt需要自行编译插件)、PostgreSQL(开源免费的数据库,很好用)、SqlServer(需要设置ODBC数据源)、kingbase(国产人大金仓数据库,该数据库其实是基于PostgreSQL改的,通过odbc数据源方式测试无误)。

    连接测试用来测试当前选择的数据库类型以及数据库信息,是否能连接数据库正常,可以避免数据库不通的情况下用来检测是否信息填写正确。

    初始化数据库按钮用来执行sql脚本来生成对应的数据库,部分数据库支持数据库文件不存在的情况下通过sql语句来创建数据库,比如mysql、postgres等就支持直接sql语句新建数据库,有部分数据库可能不支持,需要手动先在数据库管理工具中新建好数据库,然后再来这里执行初始化数据库用来新建表和初始数据。

    1.3 工作模式

    本系统支持多种工作模式,以便适应各种需求,默认采用随机模拟数据,大屏基础版本也采用此工作模式。

    1.3.1 模拟数据

    如果工作模式选择的是模拟数据,则采用随机数模拟生成数据并设置。

    1.3.2 数据库采集

    具体数据库表字段说明参见后面的数据库说明。

    如果工作模式选择的是数据库采集,则会自动连接设置的数据库,可以用对应的数据库管理工具连接数据库,打开对应的表,然后更改其中的数据,保存,可看到对应的数据反应到界面上。

    系统支持一个系统下的软件远程访问另一个系统下的数据库,比如linux系统或者mac系统远程访问win系统上的mysql数据库,数据库也可以放在云端比如阿里云(亲测无误),只要对应IP和端口可达就行,验证是否可达可以用对应的数据库管理工具连接即可。

    理论上odbc的方式支持多种数据库,比如sql server,oracle,postgresql等,所以如果没有插件支持的数据库可以考虑用odbc的方式,odbc也是跨平台的。

    如果需要远程访问mysql数据库,mysql数据库需要设置用户 root@% @@ -745,7 +745,7 @@ header, .context-menu, .megamenu-content, footer{

    4.5 内核模块

    4.5.1 通用自定义控件

    名称说明
    bottomwidget通用底部状态栏控件,可以设置软件名称、版本号、运行时间等。
    colorcombobox颜色下拉框控件,在系统设置中有。
    cpumemorylabelCPU和内存使用情况标签控件,主界面右上角显示。
    customtitlebar停靠窗体自定义标题栏控件。
    devicebutton设备按钮控件,比如图片地图模块中用到,可设置不同的图标样式和状态等,双击发出信号进行相应处理比如弹出对应视频预览等。
    framelesswidget无边框窗体管理类,无边框拖动+拉伸,主界面就用到了这个类。
    lcddatetime软件右上角显示时间的控件。
    panelwidget面板容器控件,主界面子模块表格消息,就用到此控件,用于将一堆widget放到此容器进行管理,自动形成滚动条等。
    switchbutton开关按钮控件,在系统设置中存在大量该控件。
    xslider滑动条控件,在原有滑动条基础上增加了鼠标按下立即定位等。

    4.5.2 图表组件内核

    名称说明
    customplot自定义图表组件类。
    customplotbarh自定义形状-横向柱状图。
    customplotbarv自定义形状-垂直柱状图。
    customplothead当前组件通用头文件。
    customplothelper当前组件通用辅助函数文件。
    customplotline自定义形状-平滑曲线图。
    customplottracer自定义图层绘制十字线,也叫游标,定位线。
    smoothcurve平滑曲线算法类,内置多种平滑算法,可以自行增加其他算法。

    4.5.3 数据库应用内核

    本系统只用到了该类库中的dbconnthread、dbhttpthread。 dbconnthread:封装的一个通用的数据库通信类,支持sqlite、mysql、PostgreSQL等数据库,功能包括了数据库的打开和关闭,线程执行sql语句队列信号发出执行结果等,支持重连。 -dbhttpthread:本系统除了支持数据库采集模式以外,还支持发送http网络请求的方式来采集数据,请求中带对应要查询的表,字段等信息,这个类就是专门的请求类,请求结果自动过滤运算并信号发出去,返回数据的信号和数据库采集的信号完全一致,使得主界面关联到同一个槽函数就能正常工作。

    名称说明
    dbcleanthread自动清理数据线程类。
    dbconnthread数据库通信管理线程类。
    dbdelegate自定义委托全家桶,包括复选框、下拉框、密码框、按钮等。
    dbhead当前组件通用头文件。
    dbhelper各种数据库应用函数封装,比如初始化数据库、执行sql语句等。
    dbhttpthread网络请求数据采集类。
    dbpage数据库通用翻页类。
    dbpagemodel数据库翻页类数据模型。
    navpage分页导航控件。

    4.5.4 视频监控内核

    名称说明
    ffmpegconvertffmpeg各种转换处理函数封装。
    ffmpegheadffmpeg引入头文件。
    ffmpeghelperffmpeg辅助类,包括版本号,校验url地址、获取流索引等。
    ffmpegsyncffmpeg音视频同步类,包括了同步以及发出当前播放进度信号。
    ffmpegthreadffmpeg核心解码类,包括音视频的解码。
    ffmpegtoolffmpeg工具类,用于执行ffmpeg的命令获取结果。
    ffmpegwidgetffmpeg视频显示窗体类,依赖ffmpegthread。
    videoffmpegffmpeg多通道管理类。

    4.5.5 大屏地图内核

    名称说明
    echartjsechart模块中用到的json文件转js文件,获取js文件中的名字和经纬度等处理。
    echartsechart封装类,可加载仪表盘、闪烁点图、迁徙图、世界地图、区域地图等,每个点可自定义颜色和提示信息等。
    mapbaidu百度地图封装类,支持在线和离线两种模式。

    4.5.6 视频绘制内核

    名称说明
    nv12glwidget继承自QGLWidget的NV12格式OPENGL绘制窗体。
    nv12openglwidget继承自QOpenGLWidget的NV12格式OPENGL绘制窗体。
    yuvglwidget继承自QGLWidget的YUV格式OPENGL绘制窗体。
    yuvopenglwidget继承自QOpenGLWidget的YUV格式OPENGL绘制窗体。

    4.5.7 通用浏览器内核

    名称说明
    webcore.pri通用的根据不同的Qt版本、不同的编译器环境、不同的操作系统,加载对应的浏览器内核模块和定义不同的变量。
    miniblinkminiblink封装处理类。
    webhelper经纬度转换、获取小数点经纬度值等常用处理函数。
    webjsdata通用的浏览器控件和Qt程序交互数据中转类。
    webview通用浏览器控件,支持webkit、webengine、miniblink。

    4.6 界面模块

    4.6.1 大屏控件演示

    名称说明
    frmcontrol大屏控件演示主界面,负责加载所有控件演示子窗体。
    frmplotarea曲线面积图。
    frmplotbarh横向柱状图。
    frmplotbarhs横向分组图。
    frmplotbars柱状堆积图。
    frmplotbarv标准柱状图。
    frmplotbarvs柱状分组图。
    frmplotdata数据转曲线。
    frmplotnormal标准曲线图。
    frmplotsin模拟曲线图。
    frmplotsmooth平滑曲线图。

    4.6.2 大屏模块演示

    名称说明
    frmmodule大屏子模块演示主界面,负责加载所有子模块界面。
    frmmodule1年度产量汇总。
    frmmodule2当月计划达成率。
    frmmodule3设备监控。
    frmmodule4模具进度。
    frmmodule5负荷分布。
    frmmodule6送检一次合格率。
    frmmodule7品质管理。
    frmmodule8物料管理。
    frmmodule9备用模块。
    frmmodulecenter中心窗体。
    frmmodulemap大屏地图。
    frmmodulevideo视频监控。

    4.6.3 主界面模块

    名称说明
    frmconfig系统设置界面。
    frmconfigdb通用数据库设置界面。
    frmdevice设备面板界面。
    frmmain大屏主界面。
    mainwindow以特定分辨率设置的大屏主界面用于截图。

    5 效果图

    5.1 布局方案

    5.1.1 自定义布局1

    5.1.2 自定义布局2

    5.1.3 自定义布局3

    5.1.4 自定义布局4

    5.1.5 自定义布局5

    5.1.6 自定义布局6

    5.1.7 自定义布局7

    5.1.8 自定义布局8

    5.2 配色方案

    5.2.1 紫色风格

    5.2.2 蓝色风格

    5.2.3 深蓝风格

    5.2.4 黑色风格

    5.3 模块效果图

    5.3.1 产量汇总

    5.3.2 当月计划

    5.3.3 设备监控

    5.3.4 模具进度

    5.3.5 负荷分布

    5.3.6 送检合格

    5.3.7 品质管理

    5.3.8 物料管理

    5.3.9 视频监控

    5.3.10 大屏地图

    5.3.10.1闪烁效果

    5.3.10.2 迁徙效果

    5.3.10.3 世界地图

    5.3.10.4 区域地图

    5.3.11 系统设置

    5.4 控件效果图

    5.4.1 标准曲线

    5.4.2 曲线面积

    5.4.3 模拟曲线

    5.4.4 标准柱状

    5.4.5 柱状堆积

    5.4.6 柱状分组

    5.4.7 横向柱状

    5.4.8 横向分组

    5.4.9 数据曲线

    5.4.10 平滑曲线

    5.4.11 多坐标轴

    5.4.12 多曲线图

    5.5 数据库效果图

    5.5.1 数据库-sqlite

    5.5.2 数据库-mysql

    5.5.3 数据库-sqlserver

    5.5.4 数据库-postgresql

    5.5.5 数据库-oracle

    5.5.6 数据库-kingbase

    人大金仓数据库-kingbase,其实就是postgresql数据库改的,配置文件都一样,所以可以用连接postgresql数据库的方式进行处理。

    5.5.7 数据库-远程访问

    5.5.8 数据库-odbc

    ODBC连接字符串格式如上图所示。

    5.6 各系统运行图

    5.6.1 windows-mingw

    5.6.2 windows-msvc

    5.6.3 linux-ubuntu

    5.6.4 linux-uos

    5.6.5 linux-kylin

    5.6.6 linux-neokylin

    5.6.7 linux-fedoar

    5.6.8 unix-mac

    +dbhttpthread:本系统除了支持数据库采集模式以外,还支持发送http网络请求的方式来采集数据,请求中带对应要查询的表,字段等信息,这个类就是专门的请求类,请求结果自动过滤运算并信号发出去,返回数据的信号和数据库采集的信号完全一致,使得主界面关联到同一个槽函数就能正常工作。

    名称说明
    dbcleanthread自动清理数据线程类。
    dbconnthread数据库通信管理线程类。
    dbdelegate自定义委托全家桶,包括复选框、下拉框、密码框、按钮等。
    dbhead当前组件通用头文件。
    dbhelper各种数据库应用函数封装,比如初始化数据库、执行sql语句等。
    dbhttpthread网络请求数据采集类。
    dbpage数据库通用翻页类。
    dbpagemodel数据库翻页类数据模型。
    navpage分页导航控件。

    4.5.4 视频监控内核

    名称说明
    ffmpegconvertffmpeg各种转换处理函数封装。
    ffmpegheadffmpeg引入头文件。
    ffmpeghelperffmpeg辅助类,包括版本号,校验url地址、获取流索引等。
    ffmpegsyncffmpeg音视频同步类,包括了同步以及发出当前播放进度信号。
    ffmpegthreadffmpeg核心解码类,包括音视频的解码。
    ffmpegtoolffmpeg工具类,用于执行ffmpeg的命令获取结果。
    ffmpegwidgetffmpeg视频显示窗体类,依赖ffmpegthread。
    videoffmpegffmpeg多通道管理类。

    4.5.5 大屏地图内核

    名称说明
    echartjsechart模块中用到的json文件转js文件,获取js文件中的名字和经纬度等处理。
    echartsechart封装类,可加载仪表盘、闪烁点图、迁徙图、世界地图、区域地图等,每个点可自定义颜色和提示信息等。
    mapbaidu百度地图封装类,支持在线和离线两种模式。

    4.5.6 视频绘制内核

    名称说明
    nv12glwidget继承自QGLWidget的NV12格式OPENGL绘制窗体。
    nv12openglwidget继承自QOpenGLWidget的NV12格式OPENGL绘制窗体。
    yuvglwidget继承自QGLWidget的YUV格式OPENGL绘制窗体。
    yuvopenglwidget继承自QOpenGLWidget的YUV格式OPENGL绘制窗体。

    4.5.7 通用浏览器内核

    名称说明
    webcore.pri通用的根据不同的Qt版本、不同的编译器环境、不同的操作系统,加载对应的浏览器内核模块和定义不同的变量。
    miniblinkminiblink封装处理类。
    webhelper经纬度转换、获取小数点经纬度值等常用处理函数。
    webjsdata通用的浏览器控件和Qt程序交互数据中转类。
    webview通用浏览器控件,支持webkit、webengine、miniblink。

    4.6 界面模块

    4.6.1 大屏控件演示

    名称说明
    frmcontrol大屏控件演示主界面,负责加载所有控件演示子窗体。
    frmplotarea曲线面积图。
    frmplotbarh横向柱状图。
    frmplotbarhs横向分组图。
    frmplotbars柱状堆积图。
    frmplotbarv标准柱状图。
    frmplotbarvs柱状分组图。
    frmplotdata数据转曲线。
    frmplotnormal标准曲线图。
    frmplotsin模拟曲线图。
    frmplotsmooth平滑曲线图。

    4.6.2 大屏模块演示

    名称说明
    frmmodule大屏子模块演示主界面,负责加载所有子模块界面。
    frmmodule1年度产量汇总。
    frmmodule2当月计划达成率。
    frmmodule3设备监控。
    frmmodule4模具进度。
    frmmodule5负荷分布。
    frmmodule6送检一次合格率。
    frmmodule7品质管理。
    frmmodule8物料管理。
    frmmodule9备用模块。
    frmmodulecenter中心窗体。
    frmmodulemap大屏地图。
    frmmodulevideo视频监控。

    4.6.3 主界面模块

    名称说明
    frmdevice设备面板界面。
    frmmain大屏主界面。
    frmmain2以特定分辨率设置的大屏主界面用于截图。

    5 效果图

    5.1 布局方案

    5.1.1 自定义布局1

    5.1.2 自定义布局2

    5.1.3 自定义布局3

    5.1.4 自定义布局4

    5.1.5 自定义布局5

    5.1.6 自定义布局6

    5.1.7 自定义布局7

    5.1.8 自定义布局8

    5.2 配色方案

    5.2.1 紫色风格

    5.2.2 蓝色风格

    5.2.3 深蓝风格

    5.2.4 黑色风格

    5.3 模块效果图

    5.3.1 产量汇总

    5.3.2 当月计划

    5.3.3 设备监控

    5.3.4 模具进度

    5.3.5 负荷分布

    5.3.6 送检合格

    5.3.7 品质管理

    5.3.8 物料管理

    5.3.9 视频监控

    5.3.10 大屏地图

    5.3.10.1闪烁效果

    5.3.10.2 迁徙效果

    5.3.10.3 世界地图

    5.3.10.4 区域地图

    5.3.11 系统设置

    5.4 控件效果图

    5.4.1 标准曲线

    5.4.2 曲线面积

    5.4.3 模拟曲线

    5.4.4 标准柱状

    5.4.5 柱状堆积

    5.4.6 柱状分组

    5.4.7 横向柱状

    5.4.8 横向分组

    5.4.9 数据曲线

    5.4.10 平滑曲线

    5.4.11 多坐标轴

    5.4.12 多曲线图

    5.5 数据库效果图

    5.5.1 数据库-sqlite

    5.5.2 数据库-mysql

    5.5.3 数据库-sqlserver

    5.5.4 数据库-postgresql

    5.5.5 数据库-oracle

    5.5.6 数据库-kingbase

    人大金仓数据库-kingbase,其实就是postgresql数据库改的,配置文件都一样,所以可以用连接postgresql数据库的方式进行处理。

    5.5.7 数据库-远程访问

    5.5.8 数据库-odbc

    ODBC连接字符串格式如上图所示。

    5.6 各系统运行图

    5.6.1 windows-mingw

    5.6.2 windows-msvc

    5.6.3 linux-ubuntu

    5.6.4 linux-uos

    5.6.5 linux-kylin

    5.6.6 linux-neokylin

    5.6.7 linux-fedoar

    5.6.8 unix-mac

    \ No newline at end of file diff --git a/docs/bigscreen/snap/4-6-3.jpg b/docs/bigscreen/snap/4-6-3.jpg index 57e6914103ac503c7f6076cc33c57b51447888ca..036a9fafdd361f968e2fee56b043dd6467d9e9d8 100644 GIT binary patch literal 14800 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 IT>oqF-}bd+9smFU