00 前言说明
从事Qt开发十年有余,一开始是做C#.NET开发的,因为项目需要,转行做嵌入式linux开发,在嵌入式linux上做可视化界面开发一般首选Qt,当然现在可选的方案很多比如安卓,但是十多年前那时候板子性能低,安卓在这个上面跑的话卡成屎,当时的内存大概是128MB左右,Qt也是主要用QWidget,刚出来的qml在这个上面跑个最简单的示例也是卡成屎,这也造成了本人一直对qml的印象不大好,非常依赖GPU硬件。所以也一直没有怎么去学习qml,主要深耕在qwidget领域,现在想学的时候,心有余而力不足,包括现在从qmake转向cmake,年纪大了学不动了,哎年轻真好。
学习Qt也是一个渐进的过程,量变产生质变,一点一滴积累,谁都不可能一蹴而就的,在编程的这条路上其实是很孤独的,要能学会左手温暖右手。别看我QtWidget水平比很多人高一点,其实全国也就几万名开外,你们是不知道天外有天,人外有人!应该到处走走,不要坐井观天!因为我遇到过几十个水平比我厉害的多了去了的,这还仅仅是冰山一角!真正的大佬一般不混群也不混论坛的,低调得很!可能这就是所谓的闷声发大财。此情此景我想吟诗一首:误入IT悔无声,单枪匹马夜挑灯,一入Qt深似海,从此脂粉不沾身。此情此景我想再吟诗一首:Qt群里行人稀,常有车手较高低,如今车道依旧在,不见当年老司机。
国内站点:https://gitee.com/feiyangqingyun国际站点:https://github.com/feiyangqingyun个人主页:https://blog.csdn.net/feiyangqingyun视频主页:https://space.bilibili.com/687803542
欢迎关注公众号:Qt实战/Qt入门和进阶,获取最新文章推送学习。 01 可视化大屏电子看板系统
采用分层设计,整体总共分三级界面,一级界面是整体布局,二级界面是单个功能模块,三级界面是单个控件。子控件包括饼图、圆环图、曲线图、柱状图、柱状分组图、横向柱状图、横向柱状分组图、合格率控件、百分比控件、进度控件、设备状态面板、表格数据、地图控件、视频控件等。二级界面可以自由拖动悬浮,支持最小化隐藏、最大化关闭、响应双击自定义标题栏。数据源支持模拟数据(默认)、数据库采集、串口通信(需定制)、网络通信(需定制)、网络请求等,可自由设定每个子界面的采集间隔即数据刷新频率。采用纯QWidget编写,亲测Qt4.6到Qt6.6任意版本,理论上支持后续其他Qt版本。超强跨平台,亲测windows、linux、mac、国产uos、国产银河麒麟kylin等系统,效果完美,同时还支持嵌入式linux比如树莓派、香橙派、全志、imx6等。同时集成了自定义控件、qchart饼图、echart地图等功能。内置多套配色风格样式(紫色、蓝色、深蓝、黑色),默认紫色,自适应任意分辨率。可设置系统标题、目标分辨率、布局方案,启动立即应用。可设置主背景颜色、面板颜色、十字线游标颜色等各种颜色。可设置多条曲线不同颜色,没有设置颜色的情况下内置多套精美颜色随机应用。可设置标题栏背景颜色、文字颜色。可设置曲线图表背景颜色、文字颜色、网格颜色。可设置正常颜色、警戒颜色、报警颜色、禁用颜色、百分比进度颜色。可分别设置各种字体大小,比如全局字体、软件名称、标题栏、子标题栏、加粗标签等。可设置标题栏高度、表头高度、行高度。曲线支持游标、定位线、悬停高亮数据点、悬停显示值。柱状图支持顶部(可设置顶端、上部、中间、底部)显示数据,全部自适应计算位置。支持平滑曲线,内置多种平滑曲线算法,还支持面积图平滑。面积图填充颜色可选多种规则比如单色透明度填充、透明度渐变填充等。数据库支持sqlite、mysql、postgresql、oracle、国产人大金仓等数据库。主界面直接鼠标右键切换布局、配色方案、关闭开启某个二级窗体。自动记忆所有子窗口的大小和位置,下次启动立即应用。动态加载布局方案菜单,可以动态新建布局、恢复布局、保存布局、另存布局等,用户可以制造任意布局。二级窗体,双击从主窗体分离出来浮动,可以自由调整大小。再次双击标题栏最大化,再次双击还原。子模块也可以全屏显示作为一个大屏,这样就可以一个大屏拓展出多个子大屏,放大查看子模块的数据详情,适用多屏展示。每个模块都可以自定义采集速度,如果是数据库采集会自动排队处理,后期还可以拓展每个子模块都独立的数据库采集。提供系统设置模块进行整体的配置参数设置,效果立即应用。提供精美炫酷的大屏地图模块,包括静态图片、闪烁效果、迁徙效果、世界地图、区域地图等,可指定点的经纬度坐标,识别单击响应,可以做地图跳转等,每个点都可以不同的颜色和提示信息。除了提供大屏系统外,还将每个模块都做了独立的模块示例界面,每个模块都可以独立学习使用,里面用到的控件也单独做了控件示例界面,方便学习每个控件如何使用。非常详细的开发和使用手册,其中包括数据库说明、模块对照图、控件对照图、项目结构、代码说明(精确到每个类)、演示demo、使用方法等。
02 物联网管理平台
2.1 软件模块
设备监控模块,包括数据监控(表格形式展示)、设备面板(面板形式展示)、地图监控(地图形式展示)、曲线监控(曲线形式展示)。数据查询模块,包括报警记录、运行记录、操作记录。系统设置模块,包括基本设置、端口管理、控制器管理、探测器管理、报警联动、类型设置等。其他设置模块,包括用户管理、地图管理、位置调整、组态设计、设备调试等。
2.2 基础功能
设备数据采集,支持串口、网络,串口可设置串口号、波特率,网络可设置IP地址、通讯端口。每个端口支持采集周期时间,默认1秒钟一个设备。支持设置通讯超时次数,默认3次。支持最大重连时间,用于重新读取离线的设备。控制器信息,能够添加控制器名称,选择控制器地址、控制器型号,设置该控制器下面的探测器数量。探测器信息,能够添加位号、探测器型号、气体种类、气体符号、高报值、低报值、缓冲值、清零值、是否启用、报警声音、背景地图、存储周期、数值换算小数点位数、报警延时时间、报警的类型(HH,LL,HL)等。类型管理可配置控制器型号、探测器型号、气体种类、气体符号等。地图支持导入和删除,所有的探测器在地图上的位置可自由拖动保存。端口信息、控制器信息、探测器信息、类型信息、用户信息等,都支持导入、导出、导出到excel、打印。运行记录、报警记录、操作记录,都支持多条件组合查询,比如时间段、控制器、探测器等,所有记录支持导出到excel/pdf和打印。运行记录、报警记录、操作记录都可删除指定时间范围内的数据。系统设置可选择对应表最大保存记录数,自动清理早期数据,留出足够的空间存储重要的数据。报警短信转发,支持多个接收手机号码,可设定发送间隔,比如即时发送或者6个小时发送一次所有的报警信息,短信内容过长,自动拆分多条短信。报警邮件转发,支持多个接收邮箱,可设定发送间隔,比如即时发送或者6个小时发送一次所有的报警信息,支持附件发送。设置软件的中文标题、英文标题、logo路径、版权所有等。开关设置开机运行、报警声音、自动登录、记住密码等。报警声音可设置播放次数,界面风格样式提供18套皮肤文件选择。用户管理,包括用户权限配置,不同用户可以有不同模块的权限。用户登录和用户退出,可以记住密码和自动登录,超过三次报错提示并关闭程序。四种监控模式,设备面板监控、地图监控、表格数据监控、曲线数据监控,可自由切换,四种模式下都实时展示采集到的数据,报警闪烁等。报警继电器联动,一个位号可以跨串口联动多个模块和继电器号,支持多对多。
2.3 特色功能
通信协议支持modbus_com、modbus_tcp_rtu,后期拓展mqtt等协议。数据源除了真实的硬件设备采集,还可选数据库采集,这样用户可以安排其他程序员比如java程序员将前端采集好的数据放到数据库,本系统直接从数据库采集即可。数据库采集模式可以作为通用的系统使用,更适合多人多系统协作。智能跳过超时的设备,加快对在线设备的采集速度,当设备数量很多的时候尤其有用。对智能跳过的超时的设备,在设定的重连时间自动采集一次,以便探测设备是否又重新上线。每个探测器可控是否启用,不启用则不会采集,也不会在界面显示,相当于运行阶段临时关闭。探测器可设置缓冲值和报警延时时间,在该值附近波动产生的报警,不计入报警,只有持续处于报警值且超过报警延时时间才算真正报警,这样可以规避很多波动导致的误报。探测器可设置存储周期,按照设定的时间来存储一条运行记录,可以按照重要程度对重要性高的设定存储周期短一些,不重要的设定大一些,这样可以节省不少的存储空间,也保证了重要的数据及时存储。探测器可设置清零值,在一些高精度高灵敏的设备可能出厂的时候默认值未必是0,需要设定清零值来表示初始值。探测器可设置小数点,用于计算后的真实数据控制小数点点位显示,相当于除以10、除以100、除以1000,这样大部分的探测器数据直接通过小数点位设置控制真实换算后的值,极个别的需要特殊转换的可以在通信协议中约定。探测器报警的类型支持多种,有些设备是高于某个值高报,低于某个值低报,而有些设备是在最小值最大值范围内是高报,低于最小值低报,高于最大值正常。这样可以分情况处理,涵盖各种报警类型。原创数据导入、导出、打印机制,跨平台不依赖任何组件,瞬间导出数据。导出到excel的记录支持所有excel、wps等表格文件版本,不依赖excel等软件。高报颜色、低报颜色、正常颜色、默认值颜色等,都可以自由设置。支持云端数据同步,将本地采集到的数据实时同步到云端。支持网络转发和网络接收,网络接收开启后,软件从udp接收数据进行解析。网络转发支持多个目标IP,这样就实现了本地采集的软件,自由将数据转到客户端,随时查看采集到的数据。自动记住用户最后停留的界面以及其他配置信息,重启后自动应用。报警自动切换到对应的地图,探测器按钮闪烁,表格数据对应颜色显示。双击探测器图标,弹出对应探测器详细信息,可以根据需要定制回控操作。数据库支持多种,包括sqlite、mysql、sqlserver、postgresql、oracle、人大金仓等。本地设备采集到的数据实时上传到云端,以便手机APP或者web等其他方式提取。自带设备模拟工具,支持不同型号的多个设备数据模拟,同时还带数据库数据模拟,以便在没有设备的时候测试数据。标准modbus协议,各种控制器类型、探测器类型、种类、符号等全部自定义,非常灵活和强大,通信协议示例数据非常完整,通用各种modbus协议系统,适用于各种应用场景接入。同时集成了串口通信、网络通信、数据库通信、数据导入导出打印、通信协议解析、界面UI、全局换肤等众多组件和知识点,非常适合新手入门和进阶。支持xp、win7、win10、、win11、linux、mac、各种国产系统(UOS、中标麒麟、银河麒麟等)、嵌入式linux等系统。注释完整,项目结构清晰,超级详细完整的使用开发手册,精确到每个代码文件的功能说明,不断持续迭代版本。
03 视频监控系统
3.1 软件模块
视频监控模块,各种停靠小窗体子模块,包括设备列表、图文警情、窗口信息、云台控制、预置位、巡航设置、设备控制、悬浮地图、网页浏览等。视频回放模块,包括本地回放、远程回放、设备播放、图片回放、视频上传等。电子地图模块,包括图片地图、在线地图、离线地图、路径规划等。日志查询模块,包括本地日志、设备日志等。系统设置模块,包括系统设置(基本设置、视频参数、数据库设置、地图配置、串口配置等)、录像机管理、摄像机管理、轮询配置、用户管理等。
3.2 基础功能
支持各种视频流(rtsp、rtmp、http等)、视频文件(mp4、rmvb、avi等)、本地USB摄像机播放。支持多画面切换,包括1、4、6、8、9、13、16、25、36、64画面切换。支持全屏切换,多种切换方式包括鼠标右键菜单、工具栏按钮、快捷键(alt+enter全屏,esc退出全屏)。支持视频轮询,包括1、4、9、16画面轮询,可设置轮询分组(轮询预案)、轮询间隔、码流类型等。支持onvif协议,包括设备搜索、云台控制、设备控制(图片参数、校对时间、系统重启,抓拍图片等)。支持权限管理,不同的用户可以对应不同的模块权限,比如删除日志、关闭系统等。数据库支持多种,包括sqlite、mysql、sqlserver、postgresql、oracle、人大金仓等。本地USB摄像机支持设置分辨率、帧率等参数。所有停靠模块都自动生成对应的菜单用来控制显示和隐藏,在标题栏右键可以弹出。支持显示所有模块、隐藏所有模块、复位普通布局、复位全屏布局。双击设备弹出实时预览视频,支持图片地图、在线地图、离线地图等。摄像机节点拖曳到对应窗体播放视频,同时支持拖曳本地文件直接播放。删除视频支持鼠标右键删除、悬浮条关闭删除、拖曳到视频监控面板外删除等多种方式。图片地图上设备按钮可自由拖动,自动保存位置信息。百度地图上可以鼠标单击获取经纬度信息,用来更新设备位置。视频监控面板窗体中任意通道支持拖曳交换,瞬间响应。封装了百度地图,视图切换,运动轨迹,设备点位,鼠标按下获取经纬度等。双击节点、拖曳节点、拖曳窗体交换位置等操作,均自动更新保存最后的播放地址,下次软件打开自动应用。右下角音量条控件,失去焦点自动隐藏,音量条带静音图标。支持视频截图,可指定单个或者对所有通道截图,底部小工具栏也有截图按钮。支持超时自动隐藏鼠标指针、自动全屏机制。支持onvif云台控制,可上下左右移动云台摄像机,包括复位和焦距调整等。支持任意onvif摄像机,包括但不限于海康、大华、宇视、天地伟业、华为等。可保存视频,可选定时存储或者单文件存储,可选存储间隔时间。可设置视频流通信方式tcp+udp,可设置视频解码是速度优先、质量优先、均衡等。可设置软件中文名称、英文名称、LOGO图标等。存储的视频文件支持导出到指定目录,支持批量上传到服务器。
3.3 特色功能
主界面采用停靠窗体模式,各种组件以小模块的形式加入,可自定义任意模块加入。停靠模块可拖动任意位置嵌入和悬浮,支持最大化全屏,支持多屏幕。双重布局文件存储机制,正常模式、全屏模式都对应不同的布局方案,自动切换和保存,比如全屏模式可以突出几个模块透明显示在指定位置,更具科幻感现代化。原创onvif协议机制,采用底层协议解析(udp广播搜索+http请求执行命令)更轻量易懂易学习拓展,不依赖任何第三方组件比如gsoap。原创数据导入导出机制,跨平台不依赖任何组件,瞬间导出数据。内置多个原创组件,宇宙超值超级牛逼,包括数据导入导出组件(导出到xls、pdf、打印)、数据库组件(数据库管理线程、自动清理数据线程、万能分页、数据请求等)、地图组件、视频监控组件、文件多线程收发组件、onvif通信组件、通用浏览器内核组件等。自定义信息框+错误框+询问框+右下角提示框(包含多种格式)等。精美换肤,高达17套皮肤样式随意更换,所有样式全部统一,包括菜单等。视频控件悬浮条可以自行增加多个按钮,监控界面底部小工具栏也可自行增加按钮。双击摄像机节点自动播放视频,双击节点自动依次添加视频,会自动跳到下一个,双击父节点自动添加该节点下的所有视频。可选主码流、子码流。录像机管理、摄像机管理,可添加删除修改导入导出打印信息,立即应用新的设备信息生成树状列表,不需重启。可选多种内核自由切换,ffmpeg、vlc、mpv等,均可在pro中设置。推荐用ffmpeg,跨平台最多,默认提供好了linux和mac平台上编译好的库。支持硬解码,可设置硬解码类型(qsv、dxva2、d3d11va等)。默认采用opengl绘制视频,超低的CPU资源占用,支持yuyv和nv12两种格式绘制,很牛逼。高度可定制化,用户可以很方便的在此基础上衍生自己的功能,比如增加自定义模块,增加运行模式、机器人监控、无人机监控、挖掘机监控等。支持xp、win7、win10、linux、mac、各种国产系统(UOS、中标麒麟、银河麒麟等)、嵌入式linux等系统。注释完整,项目结构清晰,超级详细完整的使用开发手册,精确到每个代码文件的功能说明,不断持续迭代版本。
04 自定义控件大全
超过202个精美控件并持续不断迭代更新升级,种类超多,控件类型极其丰富。涵盖了各种仪表盘、进度条、进度球、指南针、曲线图、标尺、温度计、导航条、导航栏,flatui、高亮按钮、滑动选择器、农历、广告轮播、饼状图、环形图、时间轴、拓展控件、增强控件等。每个类都是独立的一个.h头文件和.cpp实现文件组成,零耦合,不依赖其他文件,方便单个控件独立出来以源码形式集成到项目中,方便直观。控件数量远超其他第三方控件库比如qwt集成的控件数量,使用方式也比其简单友好零耦合。支持任意Qt版本,亲测Qt4/5/6的所有版本,全部纯Qt编写,QWidget+QPainter绘制。支持任意编译器,包括但不限于mingw、msvc、gcc、clang等编译器。支持任意操作系统,包括但不限于windows、linux、mac、android、uos、银河麒麟、各种国产linux、嵌入式linux、树莓派、香橙派、全志H3等。支持编译生成设计师插件,可直接集成到QtCreator的控件栏中,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。支持编译生成独立的非插件形式的动态库文件,体积小,比如嵌入式linux不支持designer只需要动态库的形式。每个控件都有一个单独的完整的使用demo,方便参考学习单个控件使用,非常适合初学者。提供一个所有控件使用的集成的example,方便快速查看所有控件的效果。支持直接源码集成到example的方式,方便编译到安卓,for web套件等。支持编译成wasm文件,直接网页运行,可以在谷歌、火狐、edge等浏览器运行,原生性能。每个控件的源代码都有详细中文注释,都按照统一设计规范编写,方便学习自定义控件的编写。每个控件都内置默认配色,demo对应的配色都非常精美。部分控件提供多种样式风格选择,多种指示器样式选择。所有控件自适应布局和窗体拉伸变化,自动缩放。配套额外的自定义控件属性设计器,类似组态设计器,纯中文属性名称,支持拖曳设计,所见即所得,支持导入导出xml格式。集成fontawesome图形字体+阿里巴巴iconfont收藏的几百个图形字体,享受图形字体带来的乐趣。所有控件最后生成一个dll动态库文件,可以直接集成到qtcreator中拖曳设计使用。控件源码全部分门别类存放,pri模块形式集成,提供控件对照表快速查找对应控件和说明。
05 自定义曲线图柱状图
可设置X轴Y轴范围值。可设置背景颜色、文本颜色、网格颜色。可设置三条曲线颜色、颜色集合。可设置是否显示十字定位线,支持分别开启横向或者纵向定位线。可设置十字定位线的宽度、颜色。可设置是否显示数据点、数据点的大小。可设置是否填充背景颜色形成面积图。可设置各种交互模式,比如拖动、滚轮缩放等。可设置坐标轴间距、第二坐标系可见。提供接口setDataLine直接设置曲线,支持多条。提供接口setDataBar直接设置柱状图,支持多条形成堆积图。提供接口setLabs设置文本标签替代key,包括X轴和Y轴。提供清空数据、重绘图表、外部获取QCustomPlot对象等函数接口,这样就可以进行更加详细的参数设置。提供函数 start() 和 stop() 来模拟正弦曲线。可设置柱状图显示值、值的位置(顶部、中间、底部)、精确度、颜色。支持鼠标移动到数据点高亮显示数据点,显示数据提示信息。可设置提示信息位置:自动处理、顶部、右上角、右侧、右下角、底部、左下角、左侧、左上角等。可设置是否校验数据产生不同的背景颜色,柱状图的每根柱子都可以根据数据生成不同背景颜色,比如预警黄色、报警红色。可设置是否显示图例、图例位置、图例行数、图例单行显示。支持多条曲线、柱状图、柱状分组图、横向柱状图、横向分组图、柱状堆积图等。内置 N>15 套精美颜色,自动取颜色集合的颜色,省去配色的烦恼。每条柱状图都可以设置不同的颜,分组柱状图可以设置颜色交替。Y轴数值支持百分比显示,可拓展改成成其他格式。内置平滑曲线算法,支持平滑曲线绘制,传入点集合即可。同时支持 QCustomPlot 1.3、2.0、2.1等后续所有版本。提供多坐标轴示例,一条曲线对应自己独立的坐标轴。提供多曲线图示例,一个曲线控件中绘制多条独立的曲线,曲线有自己的独立的坐标轴,非常适用于一个设备需要分开展示多条曲线的场景,而不是共用一套坐标系。支持Qt4-Qt6任意Qt版本,支持任意编译器、任意操作系统。
06 视频监控Onvif综合示例
广播搜索设备,支持IPC和NVR,依次返回。可选择不同的网卡IP进行对应网段设备的搜索。依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。可对指定的Profile获取视频流Rtsp地址,比如主码流地址、子码流地址。可对每个设备设置Onvif用户信息,用于认证获取详细信息。可实时预览摄像机图像。支持云台控制,可上下左右调节云台,支持绝对移动、相对移动、连续移动三种方式,可对图像拉近拉远。支持获取预置位集合、调用预置位、添加预置位、删除预置位等。支持图片参数设置,包括亮度、对比度、饱和度、锐度等。支持Qt4和Qt6任意Qt版本以及后续Qt版本,亲测Qt4.7到Qt6.5。支持任意编译器,亲测mingw、msvc、gcc、clang。支持任意操作系统,亲测xp、win7、win10、android、linux、嵌入式linux、树莓派全志H3等。支持任意Onvif摄像机和NVR,亲测海康、大华、宇视、天地伟业、华为、海思芯片内核等,可定制开发。支持对指定IP地址及onvif地址进行单播搜索,比如跨网段情况下非常有用。支持指定过滤条件过滤搜索设备,比如只搜索某个网段的设备或者针对某个地址的设备。支持搜索间隔和搜索策略设置,保证所有设备搜索回来,在大量设备现场很有用(亲测上千个摄像机现场,搜索回来的设备数量比摄像机厂家自带搜索工具还要准确)。可对设备进行重启、网络参数获取等。支持各种事件订阅(入侵报警、越界报警、遮挡报警等)、Onvif抓图等操作。支持NTP校时和时间同步设置。支持OSD相关操作,可以增删改查OSD信息。内置了线程实时执行Onvif指令队列,排队最大速度的执行对应的指令,执行结果信号发出。采用的最底层的TCP+UDP通信机制,原创最底层协议解析,纯QtWidget编写。超级小巧轻量,总共约3000行代码,不依赖任何第三方的库和组件,跨平台。封装好了通用的数据发送和接收解析的函数,可以非常方便的自行拓展其他Onvif处理。工具上提供了收发数据文本框,显示收发的数据,方便查看和分析。支持所有Onvif设备,代码工整,接口友好,直接引入pri即可使用。
07 视频综合应用示例
7.1 基础功能
支持各种音频视频文件格式,比如mp3、wav、mp4、asf、rm、rmvb、mkv等。支持本地摄像头设备和本地桌面采集,支持多设备和多屏幕。支持各种视频流格式,比如rtp、rtsp、rtmp、http、udp等。本地音视频文件和网络音视频文件,自动识别文件长度、播放进度、音量大小、静音状态等。文件可以指定播放位置、调节音量大小、设置静音状态等。支持倍速播放文件,可选0.5倍、1.0倍、2.5倍、5.0倍等速度,相当于慢放和快放。支持开始播放、停止播放、暂停播放、继续播放。支持抓拍截图,可指定文件路径,可选抓拍完成是否自动显示预览。支持录像存储,手动开始录像、停止录像,部分内核支持暂停录像后继续录像,跳过不需要录像的部分。支持无感知切换循环播放、自动重连等机制。提供播放成功、播放完成、收到解码图片、收到抓拍图片、视频尺寸变化、录像状态变化等信号。多线程处理,一个解码一个线程,不卡主界面。
7.2. 特色功能
同时支持多种解码内核,包括qmedia内核(Qt4/Qt5/Qt6)、ffmpeg内核(ffmpeg2/ffmpeg3/ffmpeg4/ffmpeg5/ffmpeg6)、vlc内核(vlc2/vlc3)、mpv内核(mpv1/mp2)、mdk内核、海康sdk、easyplayer内核等。非常完善的多重基类设计,新增一种解码内核只需要实现极少的代码量,就可以应用整套机制,极易拓展。同时支持多种画面显示策略,自动调整(原始分辨率小于显示控件尺寸则按照原始分辨率大小显示,否则等比缩放)、等比缩放(永远等比缩放)、拉伸填充(永远拉伸填充)。所有内核和所有视频显示模式下都支持三种画面显示策略。同时支持多种视频显示模式,句柄模式(传入控件句柄交给对方绘制控制)、绘制模式(回调拿到数据后转成QImage用QPainter绘制)、GPU模式(回调拿到数据后转成yuv用QOpenglWidget绘制)。支持多种硬件加速类型,ffmpeg可选dxva2、d3d11va等,vlc可选any、dxva2、d3d11va,mpv可选auto、dxva2、d3d11va,mdk可选dxva2、d3d11va、cuda、mft等。不同的系统环境有不同的类型选择,比如linux系统有vaapi、vdpau,macos系统有videotoolbox。解码线程和显示窗体分离,可指定任意解码内核挂载到任意显示窗体,动态切换。支持共享解码线程,默认开启并且自动处理,当识别到相同的视频地址,共享一个解码线程,在网络视频环境中可以大大节约网络流量以及对方设备的推流压力。国内顶尖视频厂商均采用此策略。这样只要拉一路视频流就可以共享到几十个几百个通道展示。自动识别视频旋转角度并绘制,比如手机上拍摄的视频一般是旋转了90度的,播放的时候要自动旋转处理,不然默认是倒着的。自动识别视频流播放过程中分辨率的变化,在视频控件上自动调整尺寸。比如摄像机可以在使用过程中动态配置分辨率,当分辨率改动后对应视频控件也要做出同步反应。音视频文件无感知自动切换循环播放,不会出现切换期间黑屏等肉眼可见的切换痕迹。视频控件同时支持任意解码内核、任意画面显示策略、任意视频显示模式。视频控件悬浮条同时支持句柄、绘制、GPU三种模式,非绝对坐标移来移去。本地摄像头设备支持指定设备名称、分辨率、帧率进行播放。本地桌面采集支持设定采集区域、偏移值、指定桌面索引、帧率、多个桌面同时采集等。录像文件同时支持打开的视频文件、本地摄像头、本地桌面、网络视频流等。瞬间响应打开和关闭,无论是打开不存在的视频或者网络流,探测设备是否存在,读取中的超时等待,收到关闭指令立即中断之前的操作并响应。支持打开各种图片文件,支持本地音视频文件拖曳播放。视频流通信方式可选tcp/udp,有些设备可能只提供了某一种协议通信比如tcp,需要指定该种协议方式打开。可设置连接超时时间(视频流探测用的超时时间)、读取超时时间(采集过程中的超时时间)。支持逐帧播放,提供上一帧/下一帧函数接口,可以逐帧查阅采集到的图像。音频文件自动提取专辑信息比如标题、艺术家、专辑、专辑封面,自动显示专辑封面。视频响应极低延迟0.2s左右,极速响应打开视频流0.5s左右,专门做了优化处理。支持H264/H265编码(现在越来越多的监控摄像头是H265视频流格式)生成视频文件,内部自动识别切换编码格式。支持用户信息中包含特殊字符(比如用户信息中包含+#@等字符)的视频流播放,内置解析转义处理。支持滤镜,各种水印及图形效果,支持多个水印和图像,可以将OSD标签信息和各种图形信息写入到MP4文件。支持视频流中的各种音频格式,AAC、PCM、G.726、G.711A、G.711Mu、G.711ulaw、G.711alaw、MP2L2等都支持,推荐选择AAC兼容性跨平台性最好。内核ffmpeg采用纯qt+ffmpeg解码,非sdl等第三方绘制播放依赖,gpu绘制采用qopenglwidget,音频播放采用qaudiooutput。内核ffmpeg和内核mdk支持安卓,其中mdk支持安卓硬解码,性能非常凶残。可以切换音视频轨道,也就是节目通道,可能ts文件带了多个音视频节目流,可以分别设置要播放哪一个,可以播放前设置好和播放过程中动态设置。可以设置视频旋转角度,可以播放前设置好和播放过程中动态设置。视频控件悬浮条自带开始和停止录像切换、声音静音切换、抓拍截图、关闭视频等功能。音频组件支持声音波形值数据解析,可以根据该值绘制波形曲线和柱状声音条,默认提供了声音振幅信号。标签和图形信息支持三种绘制方式,绘制到遮罩层、绘制到图片、源头绘制(对应信息可以存储到文件)。通过传入一个url地址,该地址可以带上通信协议、分辨率、帧率等信息,无需其他设置。各组件中极其详细的打印信息提示,尤其是报错信息提示,封装的统一打印格式。针对现场复杂的设备环境测试极其方便有用,相当于精确定位到具体哪个通道哪个步骤出错。代码框架和结构优化到最优,性能强悍,持续迭代更新升级。源码支持Qt4、Qt5、Qt6,兼容所有版本。
7.3. 视频控件
可动态添加任意多个osd标签信息,标签信息包括名字、是否可见、字号大小、文本文字、文本颜色、背景颜色、标签图片、标签坐标、标签格式(文本、日期、时间、日期时间、图片)、标签位置(左上角、左下角、右上角、右下角、居中、自定义坐标)。可动态添加任意多个图形信息,这个非常有用,比如人工智能算法解析后的图形区域信息直接发给视频控件即可。图形信息支持任意形状,直接绘制在原始图片上,采用绝对坐标。图形信息包括名字、边框大小、边框颜色、背景颜色、矩形区域、路径集合、点坐标集合等。每个图形信息都可指定三种区域中的一种或者多种,指定了的都会绘制。内置悬浮条控件,悬浮条位置支持顶部、底部、左侧、右侧。悬浮条控件参数包括边距、间距、背景透明度、背景颜色、文本颜色、按下颜色、位置、按钮图标代码集合、按钮名称标识集合、按钮提示信息集合。悬浮条控件一排工具按钮可自定义,通过结构体参数设置,图标可选图形字体还是自定义图片。悬浮条按钮内部实现了录像切换、抓拍截图、静音切换、关闭视频等功能,也可以自行在源码中增加自己对应的功能。悬浮条按钮对应实现了功能的按钮,有对应图标切换处理,比如录像按钮按下后会切换到正在录像中的图标,声音按钮切换后变成静音图标,再次切换还原。悬浮条按钮单击后都用名称唯一标识作为信号发出,可以自行关联响应处理。悬浮条空白区域可以显示提示信息,默认显示当前视频分辨率大小,可以增加帧率、码流大小等信息。视频控件参数包括边框大小、边框颜色、焦点颜色、背景颜色(默认透明)、文字颜色(默认全局文字颜色)、填充颜色(视频外的空白处填充黑色)、背景文字、背景图片(如果设置了图片优先取图片)、是否拷贝图片、缩放显示模式(自动调整、等比缩放、拉伸填充)、视频显示模式(句柄、绘制、GPU)、启用悬浮条、悬浮条尺寸(横向为高度、纵向为宽度)、悬浮条位置(顶部、底部、左侧、右侧)。
08 输入法
纯QWidget编写,支持任何目标平台(亲测windows、linux、嵌入式linux等),支持任意Qt版本(亲测Qt4.6.0到Qt6.6),支持任意编译器(亲测mingw、gcc、msvc等),支持任意控件输入包括网页中的输入控件。调用极为方便,pri文件调用形式,只要改成文件包含即可,例如pro文件中写 include($$PWD/input2019/input2019.pri)。界面清晰简洁,UI美观友好,高仿IOS输入法,非常适合触摸设备。顶部滑动选词+弹出汉字面板选词,支持滑动。具有记忆功能,之前选中过的词语首先显示,支持单个拼音多个汉字,自动调整优先级。具有造词功能,可以直接打开文件文件写入自定义词组,最高级别显示。支持数字小键盘,可选是弹出全键盘的数字面板还是小键盘。多版面字符页面,可以自行拓展各种字符展示,可用于多语言输入。支持Qt程序嵌入的浏览器中的网页中的文本框等控件的输入。界面大小随意设置,采用布局自使用任何分辨率。属性控制数字输入,例如需要文本框默认弹出的是数字则设置代码 ui->txt->setProperty(“flag”, “number”);自由控制需要显示输入法和不需要显示输入法,当某些控件不需要弹出输入法,只需要对应不需要弹出输入法的控件设置属性noinput为真即可。例如ui->txt->setProperty(“noinput”, true);界面自适应屏幕大小,输入法弹出位置为控件底部时,当超过桌面右边或者底部时,自动调整位置。实现了长按超过500毫秒重复执行按下的键的功能。例如长按退格键,不断删除。英文、中文、数字字母、大小写、特殊字符自由切换。支持单拼、全拼、模糊拼音输入,智能分页算法,可任意翻页查看汉字词组。默认自带5种皮肤颜色,可随意切换,用户也可用QSS自定义皮肤。谷歌内核的输入法引擎,品质保证,字库文件1MB,不依赖数据库,资源占用低效率极高。支持模糊拼音,比如nh=你好。可选windows专有版本,支持外部程序输入,比如输入到记事本、QQ聊天窗口等。整个输入法代码行数1000行左右,非常小,不会对程序增加大小造成负担。代码结构极为清晰,注释详细,非常容易阅读和理解,同时也可以自行修改拓展自定义的需求。
09 数据库综合示例
同时支持多种数据库比如odbc、sqlite、mysql、postgresql、sqlserver、oracle、人大金仓等。一个数据库类即可管理本地数据库通信,也支持远程数据库通信等。数据库线程支持执行各种sql语句,包括单条和批量。组件中的所有类打印信息、错误信息、执行结果都信号发出去。集成数据库通用翻页类(负责具体处理逻辑),搭配分页导航控件(负责外观),形成超级牛逼的翻页控件。集成数据库自动清理类,设定最大记录数后台自动清理早期数据。集成自定义委托类,支持复选框、文本框、下拉框、日期框、微调框、进度条等。同时支持Qt4-Qt6,亲测Qt4.6到Qt6.2任意版本,任意系统和编译器。本组件无故障 360天7乘24小时 运行在至少上万个现场,商业级别品质保证。每个类都对应完整详细的使用示例,注释详细,非常适合阅读学习。可以作为独立的程序运行,比如自动清理早期数据,同步数据到云端。全部线程处理,不卡界面,自动重连数据库。普通测试情况,sqlite数据库,数据库发生器每秒钟插入1000条记录约0.003秒钟,同时自动清理数据类每秒钟删除1000条记录约0.13秒,不同线程互不干扰。
10 皮肤生成器和精美UI界面
自带20套精美皮肤样式,其中包括黑色、灰色、扁平等。皮肤生成器只需要简单几步就可以生成一套自定义的皮肤。自带了26种uidemo,非常漂亮美观,涵盖了主界面布局、菜单切换等各种效果,总有一款适合你。所有代码和demo注释都非常详细整齐整洁,非常适合初学者学习。uidemo由简入难,可以一步步学习下去,从入门到熟悉。uidemo从常规的客户端到app端到触摸端等都有,既有鼠标操作的也有触摸操作的。皮肤中的qss样式表内容,覆盖了几乎所有的控件,非常适合学习每个控件的qss样式如何设置,而且分门别类非常清晰。自带的quihelper类,集大成之所长,超级牛逼,内置了无边框的消息框、错误框、询问框、右下角信息框、输入框、日期范围选择框等,支持倒计时关闭,集成图形字体设置方法及根据指定文字获取图片,集成CRC校验、获取应用程序文件名、文件路径、设置窗体居中显示、设置翻译文件、设置编码、设置延时、设置系统时间等各种静态方法,保你满意。支持任意Qt版本+任意编译器+任意系统,可运行在win、linux、mac OS、嵌入式linux等各种系统上。
11 地图综合应用示例
11.1 省市区域地图
同时支持闪烁点图、迁徙图、区域地图、世界地图、仪表盘等。可以设置标题、提示信息、背景颜色、文字颜色、线条颜色、区域颜色等各种颜色。可设置城市的名称、值、经纬度 集合。可设置地图的放大倍数、是否允许鼠标滚轮缩放。内置世界地图、全国地图、省份地图、地区地图,可以精确到县,所有地图全部离线使用。内置了各省市json数据文件转js文件功能,如有数据更新自行转换即可,支持单个文件转换和一键转换所有文件。内置了从json文件或者js文件获取该区域的所有名称和经纬度信息集合的功能,可以通过该方法获取到信息用来显示。依赖浏览器组件显示地图,提供的demo支持webkit/webengine/miniblink/ie 多种方式加载网页。采用miniblink浏览器内核打通了Qt5.6及后续版本+mingw编译器缺少浏览器模块的遗憾,使得整个项目支持所有Qt版本,亲测4.7到5.15等任意版本。闪烁点迁徙图等设置的点支持单独设置颜色。提供接口直接获取点击的点相关信息,方便程序联动处理。拓展性极强,可以依葫芦画瓢自行增加各种精美的echarts组件,做出牛逼的效果。内置的仪表盘组件提供交互功能,demo演示中包含了对应的代码。函数接口友好和统一,使用简单方便,就一个类。支持任意Qt版本、任意系统、任意编译器。
11.2 百度地图
同时支持在线地图和离线地图两种模式。同时支持webkit内核、webengine内核、miniblink内核、IE内核。支持设置多个标注点,信息包括名称、地址、经纬度。可设置地图是否可单击、拖动、鼠标滚轮缩放。可设置协议版本、秘钥、主题样式、中心坐标、中心城市、地理编码位置等。可设置地图缩放比例和级别,缩略图、比例尺、路况信息等控件的可见。支持地图交互,比如鼠标按下获取对应位置的经纬度。支持查询路线,可设置起点位置、终点位置、路线模式、路线方式、路线方案(最少时间、最少换乘、最少步行、不乘地铁、最短距离、避开高速)。可显示点线面工具,可直接在地图上划线、点、矩形、圆形等。可设置行政区划,指定某个城市区域绘制图层,在线地图自动输出行政区划边界点集合到js文件给离线地图使用。可静态或者动态添加多个覆盖物。支持点、折线、多边形、矩形、圆形、弧线、点聚合等。提供函数接口处理经纬度解析成地址和地址解析成经纬度坐标。提供的demo直接可以单独选点执行对应的处理比如路线查询。可以拿到路线查询到的点坐标信息集合,比如用于机器人坐标导航等。封装了丰富的函数比如删除指定点和所有点,删除指定覆盖物和所有覆盖物等。标注点弹框信息可以自定义内容,标准html格式。标注点单击事件可选 0-不处理 1-自己弹框 2-发送信号。标注点可设置动画效果 0-不处理 1-跳动 2-坠落标注点可设置本地图片文件等。函数接口友好和统一,使用简单方便,就一个类。支持js动态交互添加点、删除点、清空点、重置点,不需要刷新页面。支持任意Qt版本、任意系统、任意编译器。
11.3 离线地图下载
多线程同步下载多级别瓦片地图,不卡界面。内置多个离线地图下载请求地址,自动随机选择一个发送请求。下载地图类型同时支持街道图和卫星图。自动计算可视区域或者行政区域的下载瓦片数量。下载的级别可以自定义范围和选择。每个瓦片下载完成都发送信号通知,参数包括下载用时。可设置下载最大超时时间,超过了则丢弃跳到下一个下载任务。实时显示下载进度,以及当前级别已经下载的瓦片数和总瓦片数。下载过程中可以停止下载,下载完成自动统计总用时。内置经纬度和屏幕坐标互相转换函数。目前支持百度地图,其他地图比如谷歌地图、腾讯地图、高德地图可以定制。函数接口友好和统一,使用简单方便,就一个类。支持任意Qt版本、任意系统、任意编译器。
12 属性设计器组态软件
自动加载插件文件中的所有控件生成列表,默认自带的控件超过120个。拖曳到画布自动生成对应的控件,所见即所得。右侧中文属性栏,改变对应的属性立即应用到对应选中控件,直观简洁,非常适合小白使用。独创属性栏文字翻译映射机制,效率极高,可以非常方便拓展其他语言的属性栏。所有控件的属性自动提取并显示在右侧属性栏,包括枚举值下拉框等。支持手动选择插件文件,外部导入插件文件。可以将当前画布的所有控件配置信息导出到xml文件。可以手动选择xml文件打开控件布局,自动根据xml文件加载控件。可拉动滑动条、勾选模拟数据复选框、文本框输入,三种方式来生成数据应用所有控件。控件支持八个方位拉动调整大小,自适应任意分辨率,可键盘上下左右微调位置。打通了串口采集、网络采集、数据库采集三种方式设置数据。代码极其精简,注释非常详细,可以作为组态的雏形,自行拓展更多的功能。纯Qt编写,支持任意Qt版本+任意编译器+任意系统。