QCustomPlot横坐标为毫秒级的时间轴数据展示的实时刷新数据功能

news2024/11/17 7:20:01

在这里插入图片描述
头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    int realtimeDataSlot();
private:
    Ui::Widget *ui;
    QTimer* dataTimer;
};
#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    dataTimer = new QTimer(this);

    ui->customPlot->addGraph();
    ui->customPlot->graph(0)->setPen(QPen(QColor(40, 110, 255)));

    //设置x轴格式
    QSharedPointer<QCPAxisTickerTime> timeTicker(new QCPAxisTickerTime);
    //设置tick个数
    timeTicker->setTickCount(10);
    //毫秒为单位
    timeTicker->setTimeFormat("%h:%m:%s.%z");
    ui->customPlot->xAxis->setTicker(timeTicker);
    ui->customPlot->axisRect()->setupFullAxesBox();
    //设置Y轴的范围
    ui->customPlot->yAxis->setRange(-1, 1);


    //设置x轴为当前时间
    int nowtime = QTime::currentTime().msecsSinceStartOfDay(); //获取精度为毫秒
    double key = nowtime;
    //设置初始坐标轴的x坐标
    ui->customPlot->xAxis->setRange(key * 0.001, 10, Qt::AlignRight);

    connect(dataTimer, &QTimer::timeout, this, &Widget::realtimeDataSlot);
    dataTimer->start(0);
}

Widget::~Widget()
{
    delete ui;
}

int Widget::realtimeDataSlot()
{
    //key, 8, Qt::AlignRight
    int nowtime = QTime::currentTime().msecsSinceStartOfDay();
    double key = nowtime;

    static double lastPointKey;
    //记录每次刷新数据的时候添加点的个数,此处只想知道时钟滴答准确性,没什么作用
    static int dataCount;
    if (key - lastPointKey >= 2) //两毫秒保存一个数据
    {
        //产生随机数,注意此处只是把x轴转为秒为单位展示,实际上还是毫秒级别
        ui->customPlot->graph(0)->addData(key*0.001, QRandomGenerator::global()->bounded(110));
        lastPointKey = key;
        dataCount++;
    }

    static double lastMoveKey;
    //下面的逻辑要基于自己的想法实现,主要是多少秒刷一次x轴和移动坐标轴的问题,我的想法是一秒移动一次
    if(key - lastMoveKey >= 1000){
        ui->customPlot->xAxis->setRange(key*0.001, 10, Qt::AlignRight);  //注意此处设置key点在最右侧
        //此处需要删除10秒前的数据
        ui->customPlot->graph(0)->data()->removeBefore(key*0.001-10);
        lastMoveKey = key;

        qDebug() << dataCount;
         dataCount=0;
    }

    //y轴自适应
    ui->customPlot->graph(0)->rescaleValueAxis();
    ui->customPlot->replot();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/906355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单键电容触摸键IC原厂技术支持低功耗触摸芯片VKD223B资料

VKD223B是单键电容触摸键IC&#xff0c;提供直接模式和触发模式两种输出方式&#xff0c;具有低功耗和宽工作电压的特点&#xff0c;是目前应用量最大的触摸芯片型号。&#xff08;由于收到原厂通知&#xff0c;此料已逐渐停产&#xff0c;现有新产品进行替代&#xff0c;性能更…

Mybatis入门和环境搭建

文章目录 一. Mybatis的简介1. 什么是ORM?2. 什么是持久层&#xff1f;3. Mybatis的作用 二. Mybatis环境搭建1. 搭建一个数据库2. 创建maven项目并导入相关依赖3. Mybatis相关插件安装4. Mybatis.cfg.xml核心配置文件 三. 基于ssm逆向工程的使用1. 配置generatorConfig.xml2.…

HICP学习--VLAN实验

一、实验拓扑 二、实验要求 1、PC1/3的接口均为access模式,且属于vlan2 ,在同一网段 2、PC2/4/5/6的IP地址在同一-网段,与PC1/3不在同一网段 3、PC2可以访问4/5/6 , PC4不能访问5/6 , PC5不能访问PC6 4、所有PC通过DHCP获取ip地址, PC1/3可以访问PC2/4/5/6 三、实验步骤 首先…

pytorch 入门1-tensor 广播 view reshape

tensor 的四则运算broadcast import torch import numpy as np # 张量tensor 随机初始化 x torch.rand(4,3) print(x) y torch.randn(4,3) print(y)# 初始化全零 张量 a torch.zeros((4,4),dtypetorch.long) print(a) #初始化全一 张量 b torch.ones(4,4) print(b) c tor…

汇川PLC单位换算及电子齿轮比

本文以汇川H5U为例进行说明轴控的单位换算&#xff0c;经过改进后&#xff0c;H5U的设置界面更加合理及容易理解&#xff0c;汇川中型PLC-AM400/AM600系列的设置与此类似&#xff0c;界面也相同。 H5U支持本地轴控&#xff08;发脉冲&#xff09;和EtherCAT轴控&#xff0c;轴…

途乐证券|增持回购队伍扩容 上市公司传递信心暖流

一场“活泼资本市场&#xff0c;提振投资者决心”的举动正在紧锣密鼓地进行&#xff0c;一批上市公司斥真金白银参加增持回购部队。 8月18日&#xff0c;中国证监会有关负责人就贯彻落实“要活泼资本市场&#xff0c;提振投资者决心”情况承受媒体采访时说到&#xff0c;鼓舞有…

【Vue】vue2项目使用swiper轮播图2023年8月21日实战保姆级教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、npm 下载swiper二、使用步骤1.引入库声明变量2.编写页面3.执行js 总结 前言 swiper轮播图官网 参考文章&#xff0c;最好先看完他的介绍&#xff0c;再看…

【Spring框架】Spring事务的介绍与使用方法

⚠️ 再提醒一次&#xff1a;Spring 本身并不实现事务&#xff0c;Spring事务 的本质还是底层数据库对事务的支持。你的程序是否支持事务首先取决于数据库 &#xff0c;比如使用 MySQL 的话&#xff0c;如果你选择的是 innodb 引擎&#xff0c;那么恭喜你&#xff0c;是可以支持…

3分钟掌握实时目标检测:使用 OpenCV 和 YOLOv3 的手把手教程

实时目标检测&#xff1a;使用 OpenCV 和 YOLOv3 在这篇博客文章中&#xff0c;我们将探讨如何使用 OpenCV 和 YOLOv3 进行实时目标检测。我们将从头到尾演示整个过程&#xff0c;包括加载模型、处理图像和识别对象。 需要的库和工具 首先&#xff0c;我们需要导入以下库&am…

Jmeter 接口测试总结

背景介绍 对于 Android 项目来说&#xff0c;使用的是 Java 开发&#xff0c;网络请求接口的数量庞大且复杂&#xff0c;测试人员无法很直观的判断、得出网络请求是否存在问题。另一方面&#xff0c;为了验证请求接口是否能够在大负荷条件下&#xff0c;长时间、稳定、正常的运…

14. 实现业务功能--帖子列表

1. 版块帖子列表 对应版块中显示的帖子列表以发布时间降序排列&#xff08;desc&#xff09;不传入版块 Id 返回所有帖子 2. 实现逻辑 用户点击某个版块或首页时&#xff0c;将版块 Id 做为参数向服务器发送请求 服务器接收请求&#xff0c;并获取版块 Id&#xff0c;查询对…

多领域模型效果测试指南

在我最近的写作创作实践中&#xff0c;我尝试了使用不同的模型来测试它们的效果。通过这些测试&#xff0c;我发现每个模型在不同任务上的表现和适用性都有所不同。 首先&#xff0c;对于写作创作领域&#xff0c;我发现生成式模型可以很好地生成创意性的文章和故事。当我使用…

STM32都学什么

一、什么是STM32? 对于STM32&#xff0c;从字面意思上来理解&#xff0c;ST是意法半导体&#xff0c;M是Microelectronics的缩写&#xff0c;其中32表示的是32位&#xff0c;那么整合起来理解就是&#xff1a;STM32就是指的ST公司开发的32位微控制器。在如今的32位控制器中&am…

【二叉树构建与遍历1】先序遍历+中序遍历构建一个二叉树并输出后序遍历 C++实现

思路&#xff1a; 先来一个例子&#xff1a; 先序遍历序列为&#xff1a;FDXEAG 中序遍历序列为&#xff1a;XDEFAG 要根据先序序列和中序序列确定这个二叉树&#xff0c;通用的步骤为&#xff1a; 1.根据先序序列的第一位确定这棵树的根&#xff1b; 2.在中序序列中找到…

LVS之keepalived

1、keepalived 概述 总结&#xff1a;Keepalived 软件就是通过VRRP协议来实现高可用功能。 应用场景&#xff1a;企业应用中&#xff0c;单台服务器承担应用存在单点故障的危险 单点故障一旦发生&#xff0c;企业服务将发生中断&#xff0c;造成极大的危害 VRRP通信原理&…

【CASS精品教程】CAD2016+CASS11.0安装教程(附CASS11.0安装包下载)

文章目录 一、CAD2016_x64安装二、CASS11.0安装1. 安装程序2. 安装补丁3. 安装注册机三、CASS11.0下载地址一、CAD2016_x64安装 CASS11.0.0.8 支持 AutoCAD2010-2023,大家可以根据自己的情况安装对应的版本,本文以CAD2016为例,CAD安装过程略去。 二、CASS11.0安装 点击订…

Pytorch 手写数字识别-MINIST 数据集训练

CNN 前期文章我们分享了tensorflow 的手写数字识别的训练以及识别过程,有网友私信是否写一下pytorch训练识别过程,本期文章我们来分享一下pytorch的手写数字训练人工智能TensorFlow(十六)MNIST手写数字识别 说到图片识别就不得不提卷积神经网络,我们会在后期详细介绍,或者…

docker启动容器失败:STATUS:‘ Exited ‘

先查看正在运行的容器 # 查看正在运行的容器 docker ps # 查看所有的docker容器 docker ps -a 这个时候如果显示的是up状态&#xff0c;那就是启动成功了。 状态为exited&#xff0c;所以没有启动成功。 解决问题 1、移除镜像 先把镜像移除掉 //移除一个镜像(出现问题可以移…

一篇文章看懂前端性能优化(2023详解)

性能优化这个词我们经常会在前端的工作或面试中遇到&#xff0c;这个东西说难好像也并不怎么难&#xff0c;毕竟谁都能说上几点。但是如果你想在工作上遇到各种场景的性能瓶颈时都有直击本质的性能方案&#xff0c;或者在面试时让面试官眼前一亮&#xff0c;那就不能只拘泥于『…

nodejs+vue+elementui大学生就业管理系统hch86

本学生就业管理系统以vue作为框架&#xff0c;b/s模式以及MySql作为后台运行的数据库&#xff0c; 本系统主要包括首页&#xff0c;个人中心&#xff0c;辅导员管理&#xff0c;学生管理&#xff0c;企业管理&#xff0c;工作类型管理&#xff0c;企业招聘管理&#xff0c;投简…