QT实时数据演示_qt实时调取tp、tr、f1、map数据_Nehzil-kino的博客-程序员秘密

技术标签: qt5  QT5学习笔记  

实时数据演示

①设置功能

customPlot->addGraph();// blue line
customPlot->graph(0)->setPen(QPen(Qt::blue));
customPlot->graph(0)->setName("曲线名称");
customPlot->addGraph(); // red line
customPlot->graph(1)->setPen(QPen(Qt::red));
customPlot->graph(1)->setName("曲线名称");

QSharedPointer<QCPAxisTickerTime> timeTicker(new QCPAxisTickerTime);
timeTicker->setTimeFormat("%h:%m:%s");
customPlot->xAxis->setTicker(timeTicker);
customPlot->axisRect()->setupFullAxesBox();

customPlot->yAxis->setRange(-1.2, 1.2);
// 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(0); // 间隔0表示尽快刷新
customPlot->legend->setVisible(true);

②由计时器调用

static QTime time(QTime::currentTime());
// calculate two new data points:
double key = time.elapsed()/1000.0;// time elapsed since start of demo, in seconds
static double lastPointKey = 0;
if(key-lastPointKey > 0.002) // at most add point every 2 ms
{
// 添加数据0到曲线0
ui->customPlot->graph(0)->addData(key,qSin(key)+qrand()/(double)RAND_MAX*1*qSin(key/0.3843));
// 添加数据1到曲线1
ui->customPlot->graph(1)->addData(key,qCos(key)+qrand()/(double)RAND_MAX*0.5*qSin(key/0.4364));
// rescale value (vertical) axis to fit the current data:
//ui->customPlot->graph(0)->rescaleValueAxis();
//ui->customPlot->graph(1)->rescaleValueAxis(true);
lastPointKey = key;
}
// make key axis range scroll with the data (at a constant range size of 8):
ui->customPlot->xAxis->setRange(key, 8, Qt::AlignRight);
ui->customPlot->replot();
// calculate frames per second:
static double lastFpsKey;
static int frameCount;
++frameCount;
if(key-lastFpsKey > 2) // average fps over 2 seconds
{
  ui->statusBar->showMessage(
  QString("%1 FPS, Total Data points: %2")
  .arg(frameCount/(key-lastFpsKey), 0, 'f', 0)
  .arg(ui->customPlot->graph(0)->data()->size()+ui->customPlot->graph(1)->data()->size()), 0);
 lastFpsKey = key;
 frameCount = 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42066648/article/details/114118772

智能推荐

基于nanopi的即时通讯系统_nanopi 网络通信_tqn_qinnan的博客-程序员秘密

啊哈哈哈,终于弄好了,主要是我们的nanopi上 自己一开始配好了ip (看前面的博客 基础配置那一篇)现在呢,我给出来的UDP程序代码上 绑定的是 127.0.0.1 导致了 nanopi连接上了 交换机后  只用以本机检测 所以其余人连不上的还有 和舍友们 沟通好 不要 绑定同一个 这么多人 回头用同一个 冲突的时候也连不上的下面附上视频和nanopi连接的照片https:...

主动防御多种Deepfake模型,北大王选所在AAAI22上提出跨模型通用对抗水印CMUA-Watermark..._我爱计算机视觉的博客-程序员秘密

关注公众号,发现CV技术之美本文分享AAAI 2022论文『CMUA-Watermark: A Cross-Model Universal Adversarial Watermark fo...

语法碎碎念:begin v.s. cbegin(C++)_ZJ_Frank的博客-程序员秘密

iterator当我们需要声明一个 iterator的时候,(以 vector为例子)。我们有两种声明方法:it = vec.begin();it = vec.cbegin();它们有什么区别呢?简单来说,使用 begin会视情况返回一个 const_iterator (不能更改指针所指向的值)或者 iterator(可以改变指针所指的值)。而使用 cbegin会直接返回一个 const_iterator。举个例子:std::vector&lt;int&gt; vec;const std::

DMZ在虚拟化环境中的部署_Crystal47856321的博客-程序员秘密

常见的方法有三种:1.分别部署2.部分虚拟化3.全部虚拟化传统DMZ部署结构:分别部署:想要保持DMZ区域物理隔离采用这种方法,每个区域分别部署进入不同的服务器集群,区域之间的连接采用物理的安全设备。原本的物理网络不需要进行任何修改。唯一传统的部署方式的不同为,区域内使用了服务器虚拟化技术。优点:简单,不复杂;基本不改变物理环境;运维不改动;配置错误的...

使用visualvm远程监控Java程序_淡定一生2333的博客-程序员秘密

VisualVM和JConsole在监控本地JVM的时候是很方便的,只要应用程序运行起来,我们就可以连接上本地的JVM,从工具中监控JVM的情况。但是监控远程服务器上的JVM就需要进行一些额外的配置了。建立jstatd安全策略文件jstatd:Java Statistics Monitoring Daemon,是一个基于RMI的服务程序,用于监控基于HotSpot的JVM中资源...

UI自动化测试:Selenium+PO模式+Pytest+Allure整合_pytest+po模式实例_测试界的彭于晏的博客-程序员秘密

本人目前工作中未涉及到WebUI自动化测试,但为了提升自己的技术,多学习一点还是没有坏处的,废话不多说了,目前主流的webUI测试框架应该还是selenium,考虑到可维护性、拓展性、复用性等,我们采用PO模式去写我们的脚本,本文档也主要整合了Selenium+PO模式+Pytest+Allure,下面我们进入正题。注:文章末尾附Github地址技术前提:python、selenium、pytest基础知识1. 项目结构目录:2. PO模式介绍PO模式特点:易于维护 复用性高.

随便推点

讲给后台程序员看的前端系列教程(06)——HTML5标签(5)_谷哥的小弟的博客-程序员秘密

之前,我们已经学习了HTML常用标签、HTML文本标签、HTML语义标签、HTML结构标签;现在我们来继续学习HTML中常用的列表标签。可能猛地一下看到ul不知道它是干嘛的。可是,如果我告诉你它源自于英语短句unordered list,你是否就反应过来了呢?对的,它用于表示无序列表

博为峰Java技术文章 ——JavaSE Swing 普通按钮_bwf_erg的博客-程序员秘密

博为峰小博老师:例如一个登录窗口,要求愉入用户名和密码后,让用户选择确定还是取消的按钮组件就是普通按钮。当然,与标签组件一样,要使用它,首先必须创建一个按钮组件类对象,然后再通过使用这个类中内置的方法来操纵该对象。普通按钮是平时生活中遇到最多的组件之一。下图表格的形式介绍普通按钮组件的构造器。创建好按钮组件后,接下来就可以通过使用其内置的方法来操纵这个组件了,其常用方法如下图所示。

arcgis栅格数据绘制等值线_arcgis10.0,等值线_weixin_39581739的博客-程序员秘密

【www.520z-2.com - 话题作文】篇一:《arcgis10.0教程》1、 打开2、 设置坐标系,视图—数据框属性---坐标系---预定义---projected……---Guass……------xian1980-----Xian_1980_ 中央经线114度.3、 目录,底图图层,右键,属性,常规,编辑,选择,projected…4、 Xian 1980 3degree GK CM ...

AI程序员的远方是诗和梦想的美好?还是骨感无望的现实?_区块链大本营的博客-程序员秘密

人工智能真的玩大了吗?人工智能行业的人才真的“爆发了?”AI程序员究竟怎么样?A与B薪酬与前景程序员与远方2017年~2018年,是人工智能大火的时候。你会发现,跟朋友聊天不谈人工智能...

清除1.9.0版本tensorflow-cpu的FutureWarning警告_小鹿<^~^>的博客-程序员秘密

清除1.9.0版本tensorflow-cpu的FutureWarning警告背景解决方法背景在使用pycharm进行编程,在引入tensorflow后,每次运行都会出现一堆的FutureWarning的警告,如图:解决方法一开始使用如下的方法,并没有效果:import warningswarnings.filterwarnings("ignore")之后查看了一下版本发现num...

推荐文章

热门文章

相关标签