Qt编写可视化大屏电子看板系统14-标准曲线图
一、前言
近期将可视化大屏电子看板系统重新规划和调整项目结构代码,几个重大改变是新增启动窗体选择,可选大屏系统、控件演示、模块演示三种,其中控件演示是专门针对本系统中用到的各种自定义控件单独做的使用demo,模块演示是专门针对本系统中每个子模块单独演示,这样可以更方便的切换学习,而不是盲目的在项目代码中找,可以直接快速切换定位到具体的代码文件学习。
大屏系统中用到的曲线图柱状图都是在开源的QCustomPlot曲线图表控件基础上二次开发改造的,最基础的曲线展示莫过于标准曲线图了,QCustomPlot官方一直在更新升级代码,本人也是一直看着QCustomPlot长大的,代码质量真的没的说,后期的代码更加完美,尤其是增加了更多的模块接口,比如曲线提示标识可以指定列,XY轴可以互换,这样就可以很方便的垂直的效果转成平行的效果尤其是柱状图。
在大屏系统中需要展示的曲线会有多条,都要求不同的曲线不同的颜色区分显示,数据都是通过数据源采集好以后的静态数据,每次都是整体重新设置数据,其实在这种数据量很小的情况下,重新绘制和追加数据绘制效率没区别,都是需要重新绘制整个画布。默认XY轴都是浮点数显示,可以通过label映射换成对应的文本值显示,本系统中全部是换成了文本型数值显示,更灵活,比如对应坐标点X轴1/2/3换成1月、2月、3月这种文字显示,Y轴的数据还可以后面加上百分比符号等。
二、功能特点
- 采用分层设计,整体总共分三级界面,一级界面是整体布局,二级界面是单个功能模块,三级界面是单个控件。
- 子控件包括饼图+圆环图+曲线图+柱状图+柱状分组图+横向柱状图+横向柱状分组图+合格率控件+百分比控件+进度控件+设备状态面板+表格数据+地图控件+视频控件等。
- 二级界面可以自由拖动悬浮,支持最小化最大化关闭,响应双击自定义标题栏。
- 数据源支持模拟数据(默认)、数据库采集、串口通信(需定制)、网络通信(需定制)、网络请求等,可自由设定每个子界面的采集间隔即数据刷新频率。
- 采用纯QWidget编写,亲测Qt4.6到Qt5.15任意版本,理论上支持后续其他Qt版本,亲测win+linux+mac+uos+kylin等系统,效果完美,同时还支持嵌入式linux比如树莓派、香橙派、全志、imx6等。
- 同时集成了自定义控件+qchart饼图+echart地图功能。
- 内置多套配色风格样式(紫色、蓝色、深蓝、黑色),默认紫色,支持任何分辨率。
- 可设置标题+目标分辨率+布局方案,启动立即应用。
- 可设置主背景颜色+面板颜色+十字线游标颜色。
- 可设置多条曲线颜色,没有设置颜色的情况下内置15套精美颜色随机应用。
- 可设置标题栏背景颜色+文字颜色。
- 可设置曲线图表背景颜色+文字颜色+网格颜色。
- 可设置正常颜色+警戒颜色+报警颜色+禁用颜色+百分比进度颜色。
- 可分别设置各种字体大小,比如全局+软件名称+标题栏+子标题栏+加粗标签等。
- 可设置标题栏高度+表头高度+行高度。
- 曲线支持游标+悬停高亮数据点和显示值,柱状图支持顶部(可设置顶端+上部+中间+底部)显示数据,全部自适应计算位置。
- 主界面直接鼠标右键切换布局+配色方案+关闭开启某个二级窗体。
- 自动记忆所有子窗口的大小和位置,下次启动立即应用。
- 动态加载布局方案菜单,可以动态新建布局、恢复布局、保存布局、另存布局等,用户可以制造任意布局。
- 二级窗体,双击从主窗体分离出来浮动,可以自由调整大小。再次双击标题栏最大化,再次双击还原,相当于子模块也可以全屏显示作为一个大屏,这样就可以一个大屏拓展出多个子大屏,放大查看子模块的数据详情。
- 每个模块都可以自定义采集速度,如果是数据库采集会自动排队处理,后期还可以拓展每个子模块都独立的数据库采集。
- 提供系统设置窗口进行整体的配置参数设置。
- 提供精美炫酷的大屏地图模块,包括静态图片+闪烁效果+迁徙效果+世界地图+区域地图等,可指定点的经纬度坐标,识别单击响应,可以做地图跳转等,每个点都可以不同的颜色和提示信息,功能超牛逼!
- 除了提供大屏系统外,还将每个模块都做了独立的模块示例界面,每个模块都可以独立学习使用,里面用到的控件也单独做了控件示例界面,方便学习每个控件如何使用,考虑着实周到!
- 超级详细的开发和使用手册,其中包括详细的数据库说明、模块对照图、控件对照图、项目结构代码说明、使用方法等!
三、体验地址
- 体验地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码:01jf 文件名:bin_bigscreen.zip。
- 国内站点:https://gitee.com/feiyangqingyun
- 国际站点:https://github.com/feiyangqingyun
- 个人主页:https://blog.csdn.net/feiyangqingyun
- 知乎主页:https://www.zhihu.com/people/feiyangqingyun/
- 在线文档: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-标准曲线图的更多相关文章
- Qt编写数据可视化大屏界面电子看板13-基础版
一.前言 之前发布的Qt编写的可视化大屏电子看板系统,很多开发者比较感兴趣,也收到了很多反馈意见,纵观市面上的大屏系统,基本上都是B/S结构的web版本,需要在后台进行自定义配置模块,绑定数据源等,其 ...
- Qt编写项目作品大全(自定义控件+输入法+大屏电子看板+视频监控+楼宇对讲+气体安全等)
一.自定义控件大全 (一).控件介绍 超过160个精美控件,涵盖了各种仪表盘.进度条.进度球.指南针.曲线图.标尺.温度计.导航条.导航栏,flatui.高亮按钮.滑动选择器.农历等.远超qwt集成的 ...
- Qt编写数据可视化大屏界面电子看板2-配色方案
一.前言 做完整个数据可视化大屏界面电子看板系统后,为了提升点逼格,需要提供好几套默认的风格样式以供选择,这样用户可以选择自己喜欢的配色方案来作为整个系统的颜色方案,去看了下市面上大部分的大屏电子看板 ...
- Qt编写安防视频监控系统9-自动隐藏光标
一.前言 这个效果的灵感来自于大屏电子看板系统,在很多系统中尤其是上了大屏的时候,其实在用户不在操作的时候,是很不希望看到那个鼠标箭头指针的,只有当用户操作的时候才显示出来,这个就需要开个定时器定时计 ...
- Qt编写数据可视化大屏界面电子看板系统
一.前言 目前大屏大数据可视化UI这块非常火,趁热也用Qt来实现一个,Qt这个一站式超大型GUI超市,没有什么他做不了的,大屏电子看板当然也不在话下,有了QSS和QPainter这两个无敌的工具组合, ...
- Qt编写数据可视化大屏界面电子看板12-数据库采集
一.前言 数据采集是整个数据可视化大屏界面电子看板系统核心功能,没有数据源,这仅仅是个玩具UI,没啥用,当然默认做了定时器模拟数据,产生随机数据,这个可以直接配置文件修改来选择采用何种数据采集方法,总 ...
- Qt编写数据可视化大屏界面电子看板11-自定义控件
一.前言 说到自定义控件,我是感觉特别熟悉的几个字,本人亲自原创的自定义控件超过110个,都是来自各个行业的具体应用真实需求,而不是凭空捏造的,当然有几个小控件也有点凑数的嫌疑,在编写整个数据可视化大 ...
- Qt编写数据可视化大屏界面电子看板8-调整间距
一.前言 在数据可视化大屏界面电子看板系统中,前期为了使用目标客户机,调整间距是必不可少的工作,QMainWindow中的QDockWidget,会默认生成布局和QSplitter调整宽高大小,鼠标移 ...
- Qt编写数据可视化大屏界面电子看板4-布局另存
一.前言 布局另存是数据可视化大屏界面电子看板系统中的额外功能之一,主要用于有时候用户需要在现有布局上做个微调,然后直接将该布局另存为一个布局配置文件使用,可以省略重新新建布局重新来一次大的调整的工作 ...
- Qt编写数据可视化大屏界面电子看板3-新建布局
一.前言 能够新建布局,也是数据可视化大屏界面电子看板系统中的必备功能之一,新建布局这样的功能一般做到右键菜单中,单击新建布局菜单,弹出输入框要求输入新的布局的名称,为了更符合国情,直接支持中文名称, ...
随机推荐
- 一文彻底弄懂MySQL的MVCC多版本控制器
InnoDB 的 MVCC(Multi-Version Concurrency Control,多版本并发控制) 是 MySQL 实现高并发事务处理的一种机制.通过 MVCC,InnoDB 可以在高并 ...
- 解决IDEA中SpringBoot框架使用@Autowired注解方式注入mapper对象出现红色下划线的问题
点击编译器左上角File,点击settings进入设置界面,找到图片中对应的位置,将红线圈住的地方改为Warning,点击右下角的Apply即可
- SSIS以yyyyMMdd的形式获取当前系统时间
公式: (DT_WSTR,4)YEAR(GETDATE()) + RIGHT("0" + (DT_WSTR,2)MONTH(GETDATE()),2) + RIGHT(" ...
- Java面试题中高级进阶(JVM篇Java垃圾回收)
前言 本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!说说Java对象创建过程?知道类的生命周期吗?简述Java的对象结构?如何判断对象可以被回收?JVM的永久代中会发生垃圾回收么?你知道哪些 ...
- ABC 364
ABC 364 E - Maximum Glutton 给定 \((a_i,b_i),X,Y\), 记 \(k\) 是第一个让 \(\sum_{i=1}^{k} a_i > X\) 或 \(\s ...
- games101_Homework5
使用光线追踪来渲染图像,实现两个部分:光线的生成和光线与三角的求交 你需要修改的函数是: • Renderer.cpp 中的 Render():这里你需要为每个像素生成一条对应的光 线,然后调用函数 ...
- FPGA时序约束基础
一.时序约束的目的 由于实际信号在FPGA内部期间传输时,由于触发器等逻辑期间并非理想期间,因此不可避免地存在传输延时,这种延迟在高速工作频率.高逻辑级数时会造成后级触发器地建立时间和保持时间不满足, ...
- Kafka之使用
windows下的管理工具: kafka-tool: https://www.kafkatool.com/download.html [Windows] 常用命令: # 查看topic 列表 ./b ...
- IEDA 控制台乱码解决
1.修改idea 目录下的文件 idea64.exe.vmoptions idea.exe.vmoptions 在这个文件尾部增加 -Dfile.encoding=UTF-8 2.编辑ieda 文件配 ...
- H5C3时钟实例(rem适配)
1.原理分析和效果图 先上效果图: 屏幕适配上使用rem适配,假设用户的手机屏幕最下宽度是375px,而谷歌浏览器最小的字体大小为12px,所以我以375px为标准尺寸进行rem适配,即375px的屏 ...