QT QChart使用基本常识

2023-11-10

  1. 效果图

  1. 准备工作

ui添加QGraphicsView,提升为QChartView,命名graphicsView。

  1. 接口和变量声明

QChart *chart;
QXYSeries *series1;
QXYSeries *series2;
QXYSeries *series3;
QXYSeries *series4;
QXYSeries *series5;
QXYSeries *series6;

void initChart();
QDateTimeAxis* ceateXAxis(QString name);
QValueAxis* ceateYAxis(QString name);
QXYSeries* ceateSeries(QString name, QColor color);
  1. 接口定义

void MainWindow::initChart()
{
    chart = new QChart();
    chart->setTheme(QChart::ChartThemeDark);

    QDateTimeAxis *axisX = ceateXAxis("时间坐标系");
    QValueAxis *axisYLeft = ceateYAxis("Y轴-左");
    QValueAxis *axisYRight = ceateYAxis("Y轴-右");

    series1 = ceateSeries("数据1", Qt::red);
    series2 = ceateSeries("数据2", Qt::green);
    series3 = ceateSeries("数据3", Qt::blue);
    series4 = ceateSeries("数据4", Qt::darkRed);
    series5 = ceateSeries("数据5", Qt::darkGreen);
    series6 = ceateSeries("数据6", Qt::darkBlue);

    chart->addSeries(series1);
    chart->addSeries(series2);
    chart->addSeries(series3);
    chart->addSeries(series4);
    chart->addSeries(series5);
    chart->addSeries(series6);

    axisYLeft->setMin(-30);
    axisYLeft->setMax(30);
    axisYRight->setMin(-20);
    axisYRight->setMax(20);

    axisYLeft->setTickCount(10);
    axisYRight->setTickCount(10);

    chart->addAxis(axisX, Qt::AlignBottom);
    chart->addAxis(axisYLeft, Qt::AlignLeft);
    chart->addAxis(axisYRight, Qt::AlignRight);

    series1->attachAxis(axisX);
    series1->attachAxis(axisYLeft);
    series2->attachAxis(axisX);
    series2->attachAxis(axisYLeft);
    series3->attachAxis(axisX);
    series3->attachAxis(axisYLeft);

    series4->attachAxis(axisX);
    series4->attachAxis(axisYRight);
    series5->attachAxis(axisX);
    series5->attachAxis(axisYRight);
    series6->attachAxis(axisX);
    series6->attachAxis(axisYRight);

    ui->graphicsView->setChart(chart);
    ui->graphicsView->setRenderHint(QPainter::Antialiasing, true);//平滑曲线
    ui->graphicsView->setRubberBand(QChartView::RectangleRubberBand);//缩放
}

QDateTimeAxis* MainWindow::ceateXAxis(QString name)
{
    QDateTimeAxis *axisX = new QDateTimeAxis();
    axisX->setTitleText(name);
    axisX->setFormat("mm:ss");
    axisX->setTickCount(10);
    axisX->setLabelsAngle(-45);
    return axisX;
}

QValueAxis* MainWindow::ceateYAxis(QString name)
{
    QValueAxis *axisY = new QValueAxis();
    axisY->setTitleText(name);
    return axisY;
}

QXYSeries* MainWindow::ceateSeries(QString name, QColor color)
{
    QSplineSeries *series = new QSplineSeries();
    series->setName(name);
    series->setColor(color);
    return series;
}
  1. 测试代码

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

    initChart();

    timer = new QTimer();
    timer->setInterval(1000);
    connect(timer,SIGNAL(timeout()),this,SLOT(slotTimer()));
    timer->start();
}

void MainWindow::slotTimer()
{
    QDateTime time = QDateTime::currentDateTime();
    QRandomGenerator rand(QTime(0,0,0).secsTo(QTime::currentTime()));

    QList<QAbstractAxis*> axes = chart->axes(Qt::Horizontal);
    axes[0]->setMin(QDateTime::currentDateTime().addSecs(-5*1));
    axes[0]->setMax(QDateTime::currentDateTime().addSecs(0));

    QXYSeries *series[] = {series1, series2, series3, series4, series5, series6};
    for ( int i=0; i<=2; i++){
        if(series[i]->count()>150) {
            series[i]->removePoints(0, series[i]->count() - 150);
            series[i+3]->removePoints(0, series[i+3]->count() - 150);
        }

        int Y1 = rand.generate() % 60 - 30;
        int Y2 = Y1 - 10;
        series[i]->append(time.toMSecsSinceEpoch(), Y1);
        series[i+3]->append(time.toMSecsSinceEpoch(), Y2);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT QChart使用基本常识 的相关文章

  • 从 Qt 更改屏幕分辨率?

    我想更改屏幕分辨率 然后使用一个 ActiveX 控件 Flash 播放器 进入全屏 显然 仅适用于 Windows 的解决方案就可以了 有 Qt api 吗 还是我需要深入研究 winapi 如果是这样 我该在哪里查找 关键字 谢谢您的帮
  • 在 Windows 上从源代码构建 PhantomJS-2

    我正在尝试基于这些在 Windows 8 1 x64 上从源代码构建 PhantomJS 2 的开发版本指示 https github com ariya phantomjs wiki PhantomJS 2 但是我收到以下错误 mingw
  • 在 Windows 上以 QML 播放 RTSP 视频

    我正在尝试将 QML 中的 RTSP 流播放到视频标签中 如下所示 Repeater model 8 Video Layout fillWidth true Layout fillHeight true fillMode VideoOutp
  • QGraphicsSimpleTextItem“无效使用不完整类型”

    我的代码如下 指针部件 h QGraphicsSimpleTextItem text 指针控件 cpp void PointerWidget placeNumbers float spacing int currentTickNumber
  • Qt 和 MOC 的困境与简单的制作

    我想这更像是一个 GNU Make 问题 而不是 Qt 和 moc 但这里是 我有一个包含多个目录Q OBJECTS 我有一些简单的代码 它收集所有这些 例如 MOCS shell grep l Q OBJECT HEADERS Assum
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • Qt - 意外的 GDB 退出

    我正在尝试开发一个应用程序 该应用程序创建图像并使用双线性插值填充颜色像素 然后显示它 到目前为止我的代码如下 include
  • 仅当从 Qt 连接时网页返回 HTTP 406 错误

    我有一个测试页面设置http mlecturedownload com test qt php http mlecturedownload com test qt php有以下代码
  • Qmake 不支持源目录下的构建目录

    我创建了一个可以在 OS X 上编译和运行的应用程序 我现在想开始让它在 Windows 上运行 首先 我将项目复制到 Windows 机器上并尝试编译 但收到此错误 警告 Qmake不支持源目录下的构建目录 有任何想法吗 将影子构建目录设
  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • 使用 QPrinter 打印第 x 页(共 y 页)

    我使用 qt 从 html 代码生成 pdf 文件 QTextDocument document new QTextDocument document gt setHtml htmlContent QPrinter printer QPri
  • Qt ObjectName() 必须是唯一的吗?

    如标题所示的简单问题 如果我打电话setObjectName 在一个对象上 它是否必须是唯一的 或者只是因为约定而推荐 我已经子类化了QLabel 并希望自动为创建的对象命名 如果这是一个坏主意 我会找到一些设置随机唯一名称的方法 我实际上
  • QTableView 选择已更改

    我有一个QTableView我需要从中获取选择更改事件 我似乎无法让连接工作 我有 MyWidget h protected slots void slotLoadTransaction const QItemSelection selec
  • 关于在 Qt 中使用未记录的类

    使用无证文件是否安全QObjectUserData类和QObject setUserData in Qt 相反 你可以看看使用QObject setProperty http doc qt io qt 5 qobject html setP
  • 使用 QSet 作为 Qt 地图容器中的键

    我需要一个映射 其中键是唯一的 并且每个键都是一组或自定义 POD 结构 其中包含 3 个数据项 这些值只是指向对象实例的指针 从阅读Qt 的 QMap 与 QHash 的文档 http qt project org doc qt 4 8
  • 带 Qt 的菜单栏/系统托盘应用程序

    我是 Qt PyQt 的新手 我正在尝试制作一个应用程序 其功能将从菜单栏 系统托盘执行 这里展示了一个完美的例子 我找不到关于如何做到这一点的好资源 有人可以建议吗 Thanks 我认为您正在寻找与QMenu and QMainWindo
  • 如何在 QT 安装程序框架中区分每用户安装与系统范围安装?

    我正在使用一些名为 pgModeler 的应用程序 它的当前版本提供了一个基于 QT 安装程序框架的安装程序 Windows 上该安装程序的问题是它安装每个用户的开始菜单条目 https github com pgmodeler pgmod
  • 如何在Qt无框窗口中实现QSizeGrip?

    如何使用 Qt 无框窗口实现 QSizeGrip 代码会是什么样的 您只需在布局内窗口的一角添加 QSizeGrip 即可使其保持在该角落 QDialog dialog new QDialog 0 Qt FramelessWindowHin
  • 第一个随机数始终小于其余随机数

    我碰巧注意到 在 C 中 使用 std rand 方法调用的第一个随机数大多数时候都明显小于第二个随机数 关于 Qt 实现 第一个几乎总是小几个数量级 qsrand QTime currentTime msec qDebug lt lt q
  • 在 Qt 5 中嵌入 Python

    我想将 Python 解释器嵌入到 Qt 5 应用程序中 我在 Qt 5 中有一个工作应用程序 但是当我把 include

随机推荐

  • 【IT项目管理】第七章课后习题

    完成作业1 3的要求 使用 project 或其他项目管理工具 1 成本模型如下图 2 为项目每个月制定成本基线如下图 3 已知 Budget at Completion BAC 200000 Planned Value PV 120000
  • 深度学习 图像融合使用笔记 2023 harmonized

    目录 cvpr2023 INR Harmonization即将开源 CDTnet没开源 DCCF 图像滤镜 变色 pil灰度图转opencv
  • java Type 详解

    转自 https blog csdn net gdutxiaoxu article details 68926515 为什么要写这一系列的博客呢 因为在 Android 开发的过程中 泛型 反射 注解这些知识进场会用到 几乎所有的框架至少都
  • 简约精致的目录浏览程序:Files Photo Gallery

    引言 灵均说尽孤高事 全与逍遥意不同 勿埋我心 该程序给勿埋我心的感觉就是特别的简单 从头到尾就是一个php文件 但是它能够实现的功能却不容小觑 它用作在线相册是个不错的选择 简单介绍一下 Files是一个单文件的PHP应用程序 可以拖放到
  • 基于YOLOv7的头部解耦改进

    基于YOLOv7的头部解耦改进 利用YOLOX解耦头优化YOLOv7 提高计算机视觉识别率 近年来 计算机视觉技术不断发展 其中物体识别技术的提升对于多个领域具有重要意义 目前 一种被广泛使用的物体识别算法是 YOLO You Only L
  • 算法讲解--选择排序、数组链表

    算法讲解 选择排序 数组链表 数组和链表 选择排序 本文是对 算法图解 的第二章的学习的笔记 欢迎多多指正 数组和链表 数组 使用数组存储item意味着所有item在内存中都是相连的 在数组中存储新的item可能很麻烦 because if
  • 剑指offer 学习笔记 连续子数组的最大和

    面试题42 连续子数组的最大和 输入一个整型数组 数组里有正数也有负数 数组中的一个或连续多个整数组成一个子数组 求子数组中数字的和的最大值 要求时间复杂度为O n 直观解法是枚举数组中所有子数组并求出它们的和 一个长度为n的数组 总共有n
  • idea 创建项目之后,不识别application.yml文件

    今天烦躁的是 创建了一个服务 项目的各个包都已经识别到了 源码包 配置包 然而 创建的application yml的文件没有识别为spring的小树叶加小齿轮的图标 而是一个YML的图标 意识到idea没有正常的工作 于是各种查原因 最后
  • Vue 2 - 常见面试题汇总大全

    文章目录 一 基础知识 1 vue 的生命周期 1 1 钩子函数 1 2 钩子函数的使用方法 1 3 父子组件生命周期构造函数执行顺序 2 v show 与 v if v for 2 1 v show 与 v if 的区别 2 2 v if
  • 一元函数中的导数、微分和不定积分的关系

    在同济大学高等数学教材里 关于微分和不定积分有如下介绍 老猿在这里思考了很久 到底是微分与积分运算互逆 还是求导数与积分运算互逆 导数与微分是什么关系 查阅了各种资料 莫衷一是 有说导数是积分逆运算的 也有说微分是积分逆运算的 还有说微分和
  • 导出文件 java.util.zip.ZipException: invalid stored block lengths

    提取压缩文件会引发错误 无效的存储块长度 解决方法是 添加maven resources plugin插件 指定文件类型不编码
  • Spring Boot 统一设置Json数据返回风格(Java驼峰命名转下划线)

    编写重写了WebMvcConfigurerAdapter的配置类 Configuration EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter 统一
  • vuejs入门项目-产品售卖平台

    项目已经上传github 项目github地址 1 项目介绍 本项目主要是利用vuejs实现一个产品售卖的平台 vuejs的重要思想之一就是组件化 在本项目中也将不同的小模块进行组件化 这样可以重复利用一些模块 复用代码 减少代码的冗余 利
  • Android端RSA加密,服务端无法解密的一个坑

    关于加密填充方式 Android端RSA加密过的数据 服务器端死活解密不了 原来android系统的RSA实现是 RSA None NoPadding 而标准JDK实现是 RSA None PKCS1Padding 这造成了在android
  • FIX协议介绍与QuickFIX使用入门(上)

    定义 FIX协议是由国际FIX协会组织提供的一个开放式协议 目的是推动国际贸易电子化的进程 在各类参与者之间 包括投资经理 经纪人 买方 卖方建立起实时的电子化通讯协议 FIX协议的目标是把各类证券金融业务需求流程格式化 使之成为一个个可用
  • 50道web前端工程师面试题及答案解析,你学会了吗

    简介 本文包含了50个实用的前端面试题及答案解析 涵盖了HTML CSS JavaScript DOM Ajax MVC 模块化 ES6 SPA Webpack Babel Virtual DOM 响应式设计 移动优先设计 响应式图片 CS
  • 常用的传输媒体有哪些,各有什么特点

    常见的传输媒体有以下几种 1 双绞线 双绞线分屏蔽双绞线和无屏蔽双绞线 由两根相互绝缘的导线组成 可以传输模拟信号 也可以传输数字信号 有效带宽达250kHz 通常距离一般为几道十几公里 导线越粗其通信距离越远 在数字传输时 若传输速率为每
  • eterm系统服务器地址,Eterm管理系统

    Eterm管理系统提供用户管理 PID管理 分组管理 角色管理 指令管理等功能 可以帮助用户管理自己的设备 适合企业使用 企业可以在软件添加多种设备到软件管理 可以分组管理不同的网络设备 可以为管理员设置账户 可以在软件编辑控制设备的指令
  • C语言代码静态检查学习笔记(结尾有惊喜)

    静态检查 静态分析的概念 定义 程序静态分析是指在不运行代码的方式下 通过各种分析工具对程序代码进行扫描并做出评估的过程 特点 不实际执行程序 只是通过对代码的静态扫描对程序进行分析 执行速度快 效率高 静态分析技术 类型检查 风格检查 风
  • QT QChart使用基本常识

    效果图 准备工作 ui添加QGraphicsView 提升为QChartView 命名graphicsView 接口和变量声明 QChart chart QXYSeries series1 QXYSeries series2 QXYSeri