IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> QT绘制实时动态曲线——qcustomplot使用(二) -> 正文阅读

[大数据]QT绘制实时动态曲线——qcustomplot使用(二)

QT绘制实时动态曲线——qcustomplot使用(一)中,介绍使用官方的demo实现动态实时曲线。

官方代码移植

针对动态显示数据项目要求,移植官方代码demo

开启绘图的函数

void Widget::setupRealtimeDataDemo(QCustomPlot *customPlot)
{
	customPlot->addGraph(); // red line
	customPlot->graph(0)->setPen(QPen(Qt::red));
	customPlot->graph(0)->setAntialiasedFill(true);
	customPlot->graph(0)->setName("VL压力");
	
	customPlot->addGraph(); // darkYellow line
	customPlot->graph(1)->setPen(QPen(Qt::darkYellow));
	customPlot->graph(1)->setAntialiasedFill(true);
	customPlot->graph(1)->setName("AC1压力");
	
	customPlot->addGraph(); // black line
	customPlot->graph(2)->setPen(QPen(Qt::black));
	customPlot->graph(2)->setAntialiasedFill(true);
	customPlot->graph(2)->setName("AC2压力");
	
	customPlot->addGraph(); // green line
	customPlot->graph(3)->setPen(QPen(Qt::green));
	customPlot->graph(3)->setAntialiasedFill(true);
	customPlot->graph(3)->setName("AS压力");
	
	customPlot->addGraph(); // blue line
	customPlot->graph(4)->setName("SR压力");
	customPlot->graph(4)->setPen(QPen(Qt::blue));
	customPlot->graph(4)->setAntialiasedFill(true);
	
	
	customPlot->addGraph(); // magenta line
	customPlot->graph(5)->setPen(QPen(Qt::magenta));
	customPlot->graph(5)->setAntialiasedFill(true);
	customPlot->graph(5)->setName("BC压力");
	customPlot->xAxis->setLabel("Time(s)");
	
	customPlot->yAxis->setLabel("压力(kpa)");
	
	QSharedPointer<QCPAxisTickerDateTime> timeTicker(new QCPAxisTickerDateTime); //时间日期作为X轴
	timeTicker->setDateTimeFormat("dd.MM.yyyy hh:mm:ss");
	customPlot->xAxis->setTicker(timeTicker);
	
	customPlot->xAxis->setRange(0, 1000);
	
	customPlot->axisRect()->setupFullAxesBox();
	customPlot->yAxis->setRange(0, 1000);
	
	customPlot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom|QCP::iSelectPlottables);//可以缩放可以滚动点击选择
	
	// make left and bottom axes transfer their ranges to right and top axes:
	connect(customPlot->xAxis, SIGNAL(rangeChanged(QCPRange)), customPlot->xAxis2, SLOT(setRange(QCPRange)));
	connect(customPlot->yAxis, SIGNAL(rangeChanged(QCPRange)), customPlot->yAxis2, SLOT(setRange(QCPRange)));
	
	// setup a timer that repeatedly calls MainWindow::realtimeDataSlot:
	connect(&dataTimer, SIGNAL(timeout()), this, SLOT(realtimeDataSlot()));
	dataTimer.start(10); // Interval 0 means to refresh as fast as possible
}

绘制图的槽函数


void Widget::realtimeDataSlot()
{
  // calculate two new data points:
  double key = QDateTime::currentDateTime().toMSecsSinceEpoch()/1000.0;// time elapsed since start of demo, in seconds

  static double lastPointKey = 0;
  if (key-lastPointKey > 0.2) // at most add point every 2 ms
  {
    // add data to lines:
	customPlot->graph(0)->addData(key, rand()%700);
	customPlot->graph(1)->addData(key, rand()%700);
	customPlot->graph(2)->addData(key, rand()%500);
	customPlot->graph(3)->addData(key, rand()%400);
	customPlot->graph(4)->addData(key, rand()%250);
	customPlot->graph(5)->addData(key, rand()%100);
	 lastPointKey = key;
  }

  customPlot->xAxis->setRange(key, 10, Qt::AlignRight);  //设置x轴的范围 显示个数为8个
  customPlot->replot();

  // calculate frames per second:
  static double lastFpsKey;
  static int frameCount;
  ++frameCount;
  if (key-lastFpsKey > 2) // average fps over 2 seconds
  {
    lastFpsKey = key;
    frameCount = 0;
  }
}

然后,在widget.h中添加一些变量的声明,在widget.c文件中new需要的新对象。

改动的内容如下:

1、绘图以当前时间日期为X轴,在官方的代码demo中进行修改。

QSharedPointer<QCPAxisTickerDateTime> timeTicker(new QCPAxisTickerDateTime); //时间日期作为X轴
  timeTicker->setDateTimeFormat("dd.MM.yyyy hh:mm:ss");
  customPlot->xAxis->setTicker(timeTicker);

定义X轴的显示内容为当前时间!!!

double key = QDateTime::currentDateTime().toMSecsSinceEpoch()/1000.0;

2、
配置界面可以为缩放、可以滚动、可以选择

 customPlot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom|QCP::iSelectPlottables);//可以缩放可以滚动点击选择

3、定时器开启间隔,之前的demo是0,没有修改之前刷新太快。

dataTimer.start(10);

效果如下:
在这里插入图片描述4、添加多条曲线

在这里插入图片描述
总结:之前使用Qchart绘图,线条数据变多,就发现界面发非常卡顿,现在使用qcustomplot绘图解决了这个问题,而且添加曲线也非常好用。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:25:14  更:2022-05-05 11:25:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:50:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码