当前位置: 首页 > news >正文

使用QT绘制简单的动态数据折线图

两个核心类时QChart和QLineSeries

下面这个示例代码中,定时器每隔一段时间将曲线图中的数据点向右移动 一个单位,同时调整横坐标轴的范围,实现了一次滚动对应移动一个数据点的效果。

QLineSeries最多容纳4096+1024个点

#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include <QtCore/QRandomGenerator>
#include <QtCore/QTimer>
#include <QDebug>QT_CHARTS_USE_NAMESPACEint main(int argc, char *argv[])
{QApplication a(argc, argv);QMainWindow window;QChartView *chartView = new QChartView(&window);window.setCentralWidget(chartView);QChart *chart = new QChart();chart->legend()->hide();chartView->setChart(chart);chart->createDefaultAxes();QLineSeries *series = new QLineSeries();chart->addSeries(series);chart->createDefaultAxes();QValueAxis *axisX = qobject_cast<QValueAxis *>(chart->axes(Qt::Horizontal).at(0));QValueAxis *axisY = qobject_cast<QValueAxis *>(chart->axes(Qt::Vertical).at(0));axisY->setRange(0, 120);// 初始化数据点qreal startX = 0;for (int i = 0; i < 100; ++i) {series->append(startX + i, QRandomGenerator::global()->bounded(100));}int currentIndex = 0; // 当前数据点索引QTimer timer;timer.setInterval(100);QObject::connect(&timer, &QTimer::timeout, [&](){if (series->points().size() >= 4096 + 1024){int n = series->points().size() - 4096;series->removePoints(0, n);currentIndex-= n;qDebug() << "remove " << n;}qDebug() << currentIndex;// 移动数据点//series->remove(0);series->append(series->points().last().x() + 1, QRandomGenerator::global()->bounded(100));// 计算滚动后的横坐标范围qreal minX = series->points().at(currentIndex).x();qreal maxX = series->points().last().x();qreal targetMinX = minX + 1;qreal targetMaxX = maxX + 1;axisX->setRange(targetMinX, targetMaxX);currentIndex++;});timer.start();window.resize(800, 600);window.show();return a.exec();
}

.pro文件

QT       += core gui chartsgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cppHEADERS +=TRANSLATIONS += \myChart_zh_CN.ts# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

相关文章:

  • Laravel 中 使用模型作为标志
  • 多路h265监控录放开发-(1)建立head窗口并实现鼠标拖动整个窗口
  • 聊聊系统架构之负载均衡优化实践
  • 【调试笔记-20240618-Windows-pnpm 更新出现 Cannot find module 问题的解决方法】
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • 如何学习C语言
  • Excel 常用技巧(四)
  • Eureka 学习笔记(1)
  • 亿达中国武汉园区入选“武汉市科技金融工作站”及“武汉市线下首贷服务站”
  • 【JavaScript脚本宇宙】玩转图像处理:从基础到高级,这些库你不能错过!
  • 今年的618,似乎很平淡!
  • 计算机网络:运输层 - 概述
  • 【调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新】
  • 如何编辑和修改ROM,快速上手
  • mysql安装配置教程(Linux+Windows)
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JavaScript-Array类型
  • JavaScript函数式编程(一)
  • Shadow DOM 内部构造及如何构建独立组件
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 彻底搞懂浏览器Event-loop
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 跨域
  • 我是如何设计 Upload 上传组件的
  • # Kafka_深入探秘者(2):kafka 生产者
  • #pragma once与条件编译
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • $NOIp2018$劝退记
  • (6)设计一个TimeMap
  • (floyd+补集) poj 3275
  • (k8s中)docker netty OOM问题记录
  • (差分)胡桃爱原石
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET基础篇——反射的奥妙
  • .NET业务框架的构建
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • [ linux ] linux 命令英文全称及解释
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [C++]spdlog学习
  • [C++]二叉搜索树
  • [CentOs7]搭建ftp服务器(2)——添加用户
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
  • [FFmpeg学习]从视频中获取图片
  • [Firefly-Linux] RK3568修改控制台DEBUG为普通串口UART
  • [Foreman]解决Unable to find internal system admin account
  • [iHooya]2023年1月30日作业解析
  • [java]删除数组中的某一个元素
  • [mysql]错误解决之Failed to start MySQL Server
  • [ndss 2023]确保联邦敏感主题分类免受中毒攻击