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-新建布局
一.前言 能够新建布局,也是数据可视化大屏界面电子看板系统中的必备功能之一,新建布局这样的功能一般做到右键菜单中,单击新建布局菜单,弹出输入框要求输入新的布局的名称,为了更符合国情,直接支持中文名称, ...
随机推荐
- fastjson序列化导致prometheus返回监控数据格式错乱
在springboot 中集成prometheus的监控时遇见问题. 因为项目里在StaticResourceConfig配置了fastjson 序列化,导致prometheus接口返回数据被转化为j ...
- Fluent Operator 2.5.0 发布:新增多个插件
日前,Fluent Operator 发布了 v2.5.0. Fluent Operator v2.5.0 新增 11 个 features, 其中 Fluent Bit 新增支持 7 个插件, Fl ...
- nosql的衍生与数据库的拆分
nosql简单介绍 Redis:开源.免费.非关系型数据库.K-V数据库.内存数据库,支持持久化.事务和备份,集群(支持16个库)等高可用功能.并且性能极高(可以达到100000+的QPS),易扩展, ...
- Air780E之TCP应用,你了解吗?
一.TCP简介 TCP(TransmissionControlProtocol,传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.它主要用于在不可靠的网络环境中提供稳定的数据传输 ...
- WebLogic T3反序列化漏洞
目录 前言 T3协议概述 T3反序列漏洞分析 漏洞复现 修复措施 前言 WebLogic的反序列化漏洞是一个经典的漏洞系列,原因就在于WebLogic在通信过程中使用T3协议传输数据,涉及到了序列化和 ...
- 解读Graph+AI白皮书:LLM浪潮下,Graph尚有何为?
历时半年,由蚂蚁集团和之江实验室牵头,联合北京邮电大学.浙江大学.西湖大学.东北大学.杭州悦数科技.浙江创邻科技.北京大学.北京交通大学.复旦大学.北京海致星图科技.腾讯.信雅达科技.北京枫清科技等单 ...
- HZNU Winter Trainning 7 补题 - Zeoy
CodeForces - 1660C 题目传送门:https://vjudge.net/contest/535955#problem/C 题意:询问一个字符串最少删去几个字符,能够把这个字符串变成aa ...
- Educational Codeforces Round 90 (Rated for Div2)
Donut Shops 现在有两个超市,第一个超市的物品按件卖,每件商品的售价为\(a\)元:第二个超市的物品按箱卖,每箱有\(b\)件物品,每箱售价为\(c\)元,现在要让你买\(x\)和\(y\) ...
- Flink 1.10中idea运行出错invalid flag
今日好奇,下载Flink 1.10的源码在本机玩一玩. 将工程按照正常流程导入IDEA后,运行flink-examples中的demo竟出现如下错误 Error:java: invalid flag: ...
- 如何正确使用 RMQ
序列分块.设块长为 \(B\).每块预处理出最大值.对于询问 \([l, r]\),答案就是整块最大值和散块最大值拼起来.答案显然是 \(O(n) \sim O(\dfrac{n}{B} + B)\) ...