一、前言

近期将可视化大屏电子看板系统重新规划和调整项目结构代码,几个重大改变是新增启动窗体选择,可选大屏系统、控件演示、模块演示三种,其中控件演示是专门针对本系统中用到的各种自定义控件单独做的使用demo,模块演示是专门针对本系统中每个子模块单独演示,这样可以更方便的切换学习,而不是盲目的在项目代码中找,可以直接快速切换定位到具体的代码文件学习。

大屏系统中用到的曲线图柱状图都是在开源的QCustomPlot曲线图表控件基础上二次开发改造的,最基础的曲线展示莫过于标准曲线图了,QCustomPlot官方一直在更新升级代码,本人也是一直看着QCustomPlot长大的,代码质量真的没的说,后期的代码更加完美,尤其是增加了更多的模块接口,比如曲线提示标识可以指定列,XY轴可以互换,这样就可以很方便的垂直的效果转成平行的效果尤其是柱状图。

在大屏系统中需要展示的曲线会有多条,都要求不同的曲线不同的颜色区分显示,数据都是通过数据源采集好以后的静态数据,每次都是整体重新设置数据,其实在这种数据量很小的情况下,重新绘制和追加数据绘制效率没区别,都是需要重新绘制整个画布。默认XY轴都是浮点数显示,可以通过label映射换成对应的文本值显示,本系统中全部是换成了文本型数值显示,更灵活,比如对应坐标点X轴1/2/3换成1月、2月、3月这种文字显示,Y轴的数据还可以后面加上百分比符号等。

二、功能特点

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

三、体验地址

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

四、效果图

五、核心代码

#include "frmplotnormal.h"
#include "ui_frmplotnormal.h"
#include "head.h" frmPlotNormal::frmPlotNormal(QWidget *parent) : QWidget(parent), ui(new Ui::frmPlotNormal)
{
ui->setupUi(this);
this->initForm();
this->loadPlot();
} frmPlotNormal::~frmPlotNormal()
{
delete ui;
} void frmPlotNormal::initForm()
{
//设置线条名称,如果要增加线条 只需要这里增加线条名字就行
lineNames << "新模" << "修模" << "设变" << "测试" << "哈哈"; //隐藏表格线
//ui->customPlot->getPlot()->xAxis->grid()->setVisible(false);
//ui->customPlot->getPlot()->yAxis->grid()->setVisible(false);
//添加画布
ui->customPlot->addGraph(lineNames.count());
//设置画布边距
ui->customPlot->setPadding(9);
//设置可拖动鼠标滚轮缩放
ui->customPlot->setInteractions(3);
//设置图例可见
ui->customPlot->setLegend(true, 0, lineNames.count());
//绑定双击重新加载数据
connect(ui->customPlot->getPlot(), SIGNAL(mouseDoubleClick(QMouseEvent *)), this, SLOT(loadPlot()));
} void frmPlotNormal::loadPlot()
{
vstring lab;
vdouble key;
lvdouble values;
for (int j = 0; j < lineNames.count(); ++j) {
values << vdouble();
} int count = lineNames.count();
int dataCount = 12;
for (int i = 0; i < dataCount; i++) {
lab << QString("%1月").arg(i + 1);
key << i;
//挨个对每条线段的数据赋值
for (int j = 0; j < count; ++j) {
values[j] << CustomPlotHelper::getRandValue(10, 100);
}
} //如果需要设置扫点图则设置onlydot属性即可
//ui->customPlot->setOnlyDot(true); LineData data;
data.key = key;
for (int i = 0; i < count; ++i) {
data.index = i;
data.name = lineNames.at(i);
data.value = values.at(i);
//设置线条颜色,可以指定颜色也可以随机颜色
data.lineColor = ui->customPlot->getColors().at(i);
ui->customPlot->setDataLine(data);
} //设置坐标轴范围值+X坐标对应显示文字
ui->customPlot->setLabX(key, lab);
ui->customPlot->setRangeX(-0.5, key.count() - 0.5);
ui->customPlot->setRangeY(0, 120, 10); //初始化指示器数据高亮及悬停提示等
ui->customPlot->initItem();
//重新刷新显示
ui->customPlot->replot();
}

Qt编写可视化大屏电子看板系统14-标准曲线图的更多相关文章

  1. Qt编写数据可视化大屏界面电子看板13-基础版

    一.前言 之前发布的Qt编写的可视化大屏电子看板系统,很多开发者比较感兴趣,也收到了很多反馈意见,纵观市面上的大屏系统,基本上都是B/S结构的web版本,需要在后台进行自定义配置模块,绑定数据源等,其 ...

  2. Qt编写项目作品大全(自定义控件+输入法+大屏电子看板+视频监控+楼宇对讲+气体安全等)

    一.自定义控件大全 (一).控件介绍 超过160个精美控件,涵盖了各种仪表盘.进度条.进度球.指南针.曲线图.标尺.温度计.导航条.导航栏,flatui.高亮按钮.滑动选择器.农历等.远超qwt集成的 ...

  3. Qt编写数据可视化大屏界面电子看板2-配色方案

    一.前言 做完整个数据可视化大屏界面电子看板系统后,为了提升点逼格,需要提供好几套默认的风格样式以供选择,这样用户可以选择自己喜欢的配色方案来作为整个系统的颜色方案,去看了下市面上大部分的大屏电子看板 ...

  4. Qt编写安防视频监控系统9-自动隐藏光标

    一.前言 这个效果的灵感来自于大屏电子看板系统,在很多系统中尤其是上了大屏的时候,其实在用户不在操作的时候,是很不希望看到那个鼠标箭头指针的,只有当用户操作的时候才显示出来,这个就需要开个定时器定时计 ...

  5. Qt编写数据可视化大屏界面电子看板系统

    一.前言 目前大屏大数据可视化UI这块非常火,趁热也用Qt来实现一个,Qt这个一站式超大型GUI超市,没有什么他做不了的,大屏电子看板当然也不在话下,有了QSS和QPainter这两个无敌的工具组合, ...

  6. Qt编写数据可视化大屏界面电子看板12-数据库采集

    一.前言 数据采集是整个数据可视化大屏界面电子看板系统核心功能,没有数据源,这仅仅是个玩具UI,没啥用,当然默认做了定时器模拟数据,产生随机数据,这个可以直接配置文件修改来选择采用何种数据采集方法,总 ...

  7. Qt编写数据可视化大屏界面电子看板11-自定义控件

    一.前言 说到自定义控件,我是感觉特别熟悉的几个字,本人亲自原创的自定义控件超过110个,都是来自各个行业的具体应用真实需求,而不是凭空捏造的,当然有几个小控件也有点凑数的嫌疑,在编写整个数据可视化大 ...

  8. Qt编写数据可视化大屏界面电子看板8-调整间距

    一.前言 在数据可视化大屏界面电子看板系统中,前期为了使用目标客户机,调整间距是必不可少的工作,QMainWindow中的QDockWidget,会默认生成布局和QSplitter调整宽高大小,鼠标移 ...

  9. Qt编写数据可视化大屏界面电子看板4-布局另存

    一.前言 布局另存是数据可视化大屏界面电子看板系统中的额外功能之一,主要用于有时候用户需要在现有布局上做个微调,然后直接将该布局另存为一个布局配置文件使用,可以省略重新新建布局重新来一次大的调整的工作 ...

  10. Qt编写数据可视化大屏界面电子看板3-新建布局

    一.前言 能够新建布局,也是数据可视化大屏界面电子看板系统中的必备功能之一,新建布局这样的功能一般做到右键菜单中,单击新建布局菜单,弹出输入框要求输入新的布局的名称,为了更符合国情,直接支持中文名称, ...

随机推荐

  1. ribbon配置负载均衡策略

    ribbon的负载均衡策略 com.netflix.loadbalancer.RandomRule:从提供服务的实例中以随机的方式: com.netflix.loadbalancer.RoundRob ...

  2. SDUT 2021 Autumn Team Contest 36th G - Alice’s Stamps(补)

    队友做出的这个题,赛后补的=.= G - Alice's Stamps (一般DP) 题目大意 :给你m个区间,选k个,求k个区间并集 1≤T≤100 1≤K≤M 1≤N,M≤2000 1≤Li≤ R ...

  3. 如何在Spark键值对数据中,对指定的Key进行输出/筛选/模式匹配

    在用键值对RDD进行操作时,经常会遇到不知道如何筛选出想要数据的情况,这里提供了一些解决方法 目录 1.对固定的Key数据进行查询 2.对不固定的Key数据进行模糊查询 1.对固定的Key数据进行查询 ...

  4. debian大便系统配置国内软件源

    本例在debian:buster-slim docker镜像中实验通过 1.启动docker实例 docker run -it --name debian debian:buster-slim bas ...

  5. 6.Kubernetes集群管理工具kubectl

    Kubernetes集群管理工具kubectl 概述 kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署 命令格式 ...

  6. ECharts 引入中国地图和区域地图

    一,引入中国地图   <div  id="chinaMap"></div> import china from 'echarts/map/js/china. ...

  7. gh-ost工具在线改表过程的详细解析

    gh-ost,是github开源的一款在线修改MySQL表结构的工具https://github.com/github/gh-ost/,它不使用pt-osc的触发器机制,而是使用解析binlog来实现 ...

  8. Java单例对象同步问题探讨

    在本文中,作者向大家讲述了Single Call 模式的原理,同时也介绍了Single Call 模式的实现问题.  评论: 邓明 (dengming@cn.ibm.com), 高级信息系统工程师, ...

  9. go官方包依赖管理工具之mod

    1.1.go mod是什么 go mod 是Golang 1.11 版本引入的官方包(package)依赖管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理. 之前Golang ...

  10. 2024-11-27:字符串的分数。用go语言,给定一个字符串 s,我们可以定义其“分数”为相邻字符的 ASCII 码差值绝对值的总和。 请计算并返回字符串 s 的分数。 输入:s = “hello“

    2024-11-27:字符串的分数.用go语言,给定一个字符串 s,我们可以定义其"分数"为相邻字符的 ASCII 码差值绝对值的总和. 请计算并返回字符串 s 的分数. 输入:s ...