【嵌入式——QT】QT Charts

【嵌入式——QT】QT Charts

  • 概述
  • Qt提供的坐标轴类
  • QChart
  • QLineSeries
  • QValueAxis
  • 常见图表及用到的序列类
  • 图示
  • 代码示例

概述

QT Charts模块是一组易于使用的图表组件,它基于Qt的Graphics View架构,其核心组件是QChartView和QChart,QChartView父类是QGraphicsView,就是Graphics View架构的视图组件,所以QChartView是用于显示图表的视图,要想使用Qt Charts模块,就要在.pro文件中引入 Qt += charts

Qt提供的坐标轴类

  • QValueAxis:数值坐标轴;
  • QCategoryAxis:分组数值坐标轴;
  • QLongValueAxis:对数数值坐标轴;
  • QBarCategoryAxis:类别坐标轴;
  • QDateTimeAxis:日期时间坐标轴;

QChart

QChart是组合图表各部件,显示各种数据序列的绘图组件。

QChart主要函数

  • setTitle():设置图表标题;
  • setTitleFont():设置图表标题字体;
  • setTitleBrush():设置图表标题画刷;
  • setTheme():设置主题;
  • setMargins():设置绘图区与图表边界的4个边距;
  • legend():返回图表的图例;
  • setAnimationOptions():设置序列或坐标轴的动画效果;
  • addSeries():添加序列;
  • series():返回图表拥有的序列的列表;
  • removeSeries():移除一个序列,但并不删除序列对象;
  • removeAllSeries():移除并删除图表的所有序列;
  • addAxis():为图表的某个方向添加坐标轴;
  • axes():返回某个方向的坐标轴列表;
  • setAxisX():设置某个序列的水平方向的坐标轴;
  • setAxisY():设置某个序列的垂直方向的坐标轴;
  • removeAxis():移除一个坐标轴;
  • createDefaultAxes():根据已添加的序列的类型,创建缺省的坐标轴,前面已有的坐标轴会被删除;

QLineSeries

QLineSeries是用于绘制二维数据点的折线图。
QLineSeries类主要函数

  • setName():设置序列的名称 ;
  • chart():返回序列所属的图表对象 ;
  • setVisible():设置序列可见性;
  • show():显示序列;
  • hide():隐藏序列 ;
  • setColor():设置序列线条颜色 ;
  • setPen():设置绘制线条的画笔 ;
  • setBrush():设置绘制数据点的画刷 ;
  • setPointsVisible():设置数据点可见性 ;
  • append():添加一个数据点到序列;
  • insert():在某个位置插入一个数据点 ;
  • replace():替换某个数据点;
  • clear():清空所有数据点 ;
  • removePoints():从某个位置开始,删除指定个数的数据点;
  • setPointLabelsVisible():设置数据点标签的可见性;
  • setPointLabelsColor():设置数据点标签的文字颜色;
  • setPointLabelsFont():设置数据点标签的字体;
  • setPointLabelsFormat():设置数据点标签的格式;

QValueAxis

QValueAxis是数值坐标轴。

QValueAxis主要函数

  • setVisible():设置坐标轴可见性;
  • orientation():返回坐标轴方向;
  • setMin():设置坐标轴最小值;
  • setMax():设置坐标轴最大值;
  • setTitleVisible():设置轴标题可见性;
  • setRange():设置坐标轴最大、最小值范围 ;
  • setTitleText():设置轴标题文字;
  • setTitleFont():设置轴标题字体 ;
  • setLabelFromat():设置标签格式 ;
  • setLabelsBrush():设置标签的画刷;
  • setLabelsColor():设置标签的颜色 ;
  • setLabelsFont():设置标签的字体 ;
  • setTickCount():设置坐标轴主刻度的个数 ;
  • setLineVisible():设置轴线和刻度线的可见性;
  • setLinePen():设置轴线和刻度线的画笔;
  • setGridLineColor():设置网格线颜色 ;
  • setGridLinePen():设置网格线画笔;
  • setMinorTickCount():设置两个主刻度之间的次刻度的个数 ;
  • setMinorGridLineColor():设置次网格线的颜色 ;
  • setMinorGridLinePen():设置次网格线的画笔 ;
  • setMinorGridLineVisible():设置次网格线的可见性;

常见图表及用到的序列类

  • 柱状图:QBarSeries;
  • 水平柱状图:QHorizontalBarSeries;
  • 百分比柱状图:QPercentBarSeries;
  • 水平百分比柱状图:QHorizontalBarSeries;
  • 堆叠柱状图:QStackedBarSeries;
  • 水平堆叠柱状图:QHorizontalBarSeries;
  • 火柴盒图:QBoxPlotSeries;
  • 饼图:QPieSeries;
  • 折线图:QLineSeries;
  • 光滑折线图:QSplineSeries;
  • 散点图:QScatterSeries;
  • 面积图:QAreaSeries;
    这些类都是从QAbstractSeries类继承而来的。

图示

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/669535a0574b4c60ad9396172185185a.png
在这里插入图片描述
在这里插入图片描述

代码示例

QChartMainWindow.h

#ifndef QCHARTMAINWINDOW_H
#define QCHARTMAINWINDOW_H#include <QMainWindow>
#include <QtCharts>namespace Ui
{class QChartMainWindow;
}class QChartMainWindow : public QMainWindow
{Q_OBJECTpublic:explicit QChartMainWindow(QWidget* parent = nullptr);~QChartMainWindow();QLineSeries* curSeries;//当前序列QValueAxis* curAxis;//当前坐标轴void createChart();//创建图表void prepareData();//更新数据void updateFromChart();//从图表更新到界面void initUi();private slots:void on_comboBox_currentIndexChanged(int index);void on_comboBox_2_currentIndexChanged(int index);void on_pushButton_3_clicked();void on_checkBox_6_stateChanged(int arg1);void on_checkBox_7_stateChanged(int arg1);void on_horizontalSlider_valueChanged(int value);void on_radioButton_clicked();void on_radioButton_2_clicked();void on_radioButton_3_clicked();void on_radioButton_4_clicked();void on_checkBox_2_stateChanged(int arg1);void on_radioButton_9_clicked();void on_radioButton_10_clicked();void on_checkBox_3_stateChanged(int arg1);void on_pushButton_clicked();void on_pushButton_2_clicked();void on_pushButton_6_clicked();void on_pushButton_7_clicked();void on_pushButton_8_clicked();void on_radioButtonX_clicked();void on_radioButtonY_clicked();void on_pushButtonRange_clicked();void on_pushButton_5_clicked();private:Ui::QChartMainWindow* ui;QChart* chart;QLineSeries* series0;QLineSeries* series1;
};#endif // QCHARTMAINWINDOW_H

QChartMainWindow.cpp

#include "QChartMainWindow.h"
#include "ui_QChartMainWindow.h"
#include <QTime>
#include <QFontDialog>
#include <QColorDialog>
QChartMainWindow::QChartMainWindow(QWidget* parent): QMainWindow(parent), ui(new Ui::QChartMainWindow)
{ui->setupUi(this);createChart();prepareData();updateFromChart();initUi();
}QChartMainWindow::~QChartMainWindow()
{delete ui;
}void QChartMainWindow::createChart()
{chart = new QChart();chart->setTitle(u8"函数曲线");ui->graphicsView->setChart(chart);ui->graphicsView->setRenderHint(QPainter::Antialiasing);ui->graphicsView->chart()->legend()->setAlignment(Qt::AlignTop);//创建折线序列series0 = new QLineSeries();series1 = new QLineSeries();series0->setName(u8"Sin曲线");series1->setName(u8"Cos曲线");curSeries = series0;QPen pen;pen.setStyle(Qt::DotLine);pen.setWidth(2);pen.setColor(Qt::red);series0->setPen(pen);pen.setStyle(Qt::SolidLine);pen.setColor(Qt::blue);series1->setPen(pen);chart->addSeries(series0);chart->addSeries(series1);//数值坐标轴 X轴QValueAxis* axisX = new QValueAxis;curAxis = axisX;axisX->setRange(0, 10);axisX->setLabelFormat("%.1f");axisX->setTickCount(11);axisX->setMinorTickCount(4);axisX->setTitleText("time(secs)");//数值坐标轴 Y轴QValueAxis* axisY = new QValueAxis;axisY->setRange(-2, 2);axisY->setLabelFormat("%.2f");axisY->setTickCount(5);axisY->setMinorTickCount(4);axisY->setTitleText("value");chart->setAxisX(axisX, series0);chart->setAxisX(axisX, series1);chart->setAxisY(axisY, series0);chart->setAxisY(axisY, series1);
}//填充数据
void QChartMainWindow::prepareData()
{QLineSeries* series0 = (QLineSeries*)ui->graphicsView->chart()->series().at(0);QLineSeries* series1 = (QLineSeries*)ui->graphicsView->chart()->series().at(1);series0->clear();series1->clear();qsrand(QTime::currentTime().second());qreal t=0, y1, y2, intv=0.1;qreal rd;int cnt = 100;for(int i=0; i<cnt; i++) {rd=(qrand()%10)-5;y1 = qSin(t)+rd/50;series0->append(t, y1);y2=qCos(t)+rd/50;series1->append(t, y2);t+=intv;}
}void QChartMainWindow::updateFromChart()
{QChart* aChart = ui->graphicsView->chart();ui->lineEditTitle->setText(aChart->title());QMargins mg = aChart->margins();ui->spinBox->setValue(mg.left());ui->spinBox_2->setValue(mg.right());ui->spinBox_3->setValue(mg.top());ui->spinBox_4->setValue(mg.bottom());
}void QChartMainWindow::initUi()
{ui->comboBox->addItem("NoAnimation", 0);ui->comboBox->addItem("GridAxisAnimations", 1);ui->comboBox->addItem("SeriesAnimations", 2);ui->comboBox->addItem("AllAnimations", 3);ui->comboBox_2->addItem("ChartThemeLight", 0);ui->comboBox_2->addItem("ChartThemeBlueCerulean", 1);ui->comboBox_2->addItem("ChartThemeDark", 2);ui->comboBox_2->addItem("ChartThemeBrownSand", 3);ui->comboBox_2->addItem("ChartThemeBlueNcs", 4);ui->comboBox_2->addItem("ChartThemeHighContrast", 5);ui->comboBox_2->addItem("ChartThemeBlueIcy", 6);ui->comboBox_2->addItem("ChartThemeQt", 7);ui->checkBox_7->setCheckState(Qt::Checked);ui->checkBox_6->setCheckState(Qt::Checked);ui->checkBox_2->setCheckState(Qt::Checked);ui->checkBox_3->setCheckState(Qt::Checked);ui->radioButton->setChecked(true);ui->horizontalSlider->setRange(0, 100);ui->horizontalSlider->setValue(100);
}void QChartMainWindow::on_comboBox_currentIndexChanged(int index)
{switch(index) {case 0:chart->setAnimationOptions(QChart::NoAnimation);break;case 1:chart->setAnimationOptions(QChart::GridAxisAnimations);break;case 2:chart->setAnimationOptions(QChart::SeriesAnimations);break;case 3:chart->setAnimationOptions(QChart::AllAnimations);break;}
}void QChartMainWindow::on_comboBox_2_currentIndexChanged(int index)
{switch(index) {case 0:chart->setTheme(QChart::ChartThemeLight);break;case 1:chart->setTheme(QChart::ChartThemeBlueCerulean);break;case 2:chart->setTheme(QChart::ChartThemeDark);break;case 3:chart->setTheme(QChart::ChartThemeBrownSand);break;case 4:chart->setTheme(QChart::ChartThemeBlueNcs);break;case 5:chart->setTheme(QChart::ChartThemeHighContrast);break;case 6:chart->setTheme(QChart::ChartThemeBlueIcy);break;case 7:chart->setTheme(QChart::ChartThemeQt);break;}
}void QChartMainWindow::on_pushButton_3_clicked()
{bool ok = false;QFont font = QFontDialog::getFont(&ok);if(ok) {ui->graphicsView->chart()->legend()->setFont(font);}
}void QChartMainWindow::on_checkBox_6_stateChanged(int arg1)
{if(arg1 ==2) {curSeries->setVisible(true);} else {curSeries->setVisible(false);}
}void QChartMainWindow::on_checkBox_7_stateChanged(int arg1)
{if(arg1 ==2) {curSeries->setPointsVisible(true);} else {curSeries->setPointsVisible(false);}
}void QChartMainWindow::on_horizontalSlider_valueChanged(int value)
{curSeries->setOpacity(value);
}void QChartMainWindow::on_radioButton_clicked()
{ui->graphicsView->chart()->legend()->setAlignment(Qt::AlignTop);
}void QChartMainWindow::on_radioButton_2_clicked()
{ui->graphicsView->chart()->legend()->setAlignment(Qt::AlignBottom);
}void QChartMainWindow::on_radioButton_3_clicked()
{ui->graphicsView->chart()->legend()->setAlignment(Qt::AlignLeft);
}void QChartMainWindow::on_radioButton_4_clicked()
{ui->graphicsView->chart()->legend()->setAlignment(Qt::AlignRight);
}void QChartMainWindow::on_checkBox_2_stateChanged(int arg1)
{if(arg1 == 2) {ui->graphicsView->chart()->legend()->setVisible(true);} else {ui->graphicsView->chart()->legend()->setVisible(false);}
}void QChartMainWindow::on_radioButton_9_clicked()
{curSeries=series0;
}void QChartMainWindow::on_radioButton_10_clicked()
{curSeries=series1;
}void QChartMainWindow::on_checkBox_3_stateChanged(int arg1)
{if(arg1 == 2) {ui->graphicsView->chart()->legend()->backgroundVisibleChanged(true);} else {ui->graphicsView->chart()->legend()->backgroundVisibleChanged(false);}
}void QChartMainWindow::on_pushButton_clicked()
{chart->setTitle(ui->lineEdit->text());
}void QChartMainWindow::on_pushButton_2_clicked()
{bool ok = false;QFont font = QFontDialog::getFont(&ok);if(ok) {ui->graphicsView->chart()->setTitleFont(font);}
}void QChartMainWindow::on_pushButton_6_clicked()
{ui->lineEdit_2->setText(curSeries->name());
}void QChartMainWindow::on_pushButton_7_clicked()
{QColor color = QColorDialog::getColor(curSeries->color(), this, u8"选择颜色");if(color.isValid()) {curSeries->setColor(color);}
}void QChartMainWindow::on_pushButton_8_clicked()
{//TODO 曲线pen
}void QChartMainWindow::on_radioButtonX_clicked()
{curAxis = (QValueAxis*)ui->graphicsView->chart()->axisX();ui->doubleSpinBoxMin->setValue(curAxis->min());ui->doubleSpinBoxMax->setValue(curAxis->max());ui->lineEditTitle->setText(curAxis->titleText());ui->checkBox->setChecked(curAxis->isTitleVisible());
}void QChartMainWindow::on_radioButtonY_clicked()
{curAxis = (QValueAxis*)ui->graphicsView->chart()->axisY();ui->doubleSpinBoxMin->setValue(curAxis->min());ui->doubleSpinBoxMax->setValue(curAxis->max());ui->lineEditTitle->setText(curAxis->titleText());ui->checkBox->setChecked(curAxis->isTitleVisible());
}void QChartMainWindow::on_pushButtonRange_clicked()
{curAxis->setRange(ui->doubleSpinBoxMin->text().toDouble(), ui->doubleSpinBoxMax->text().toDouble());
}void QChartMainWindow::on_pushButton_5_clicked()
{QColor color = QColorDialog::getColor(curSeries->color(), this, u8"选择颜色");if(color.isValid()) {ui->graphicsView->chart()->legend()->setLabelColor(color);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软硬件全开源,方案分享 | 旋钮温控器方案

温控器用于控制室内暖通设备&#xff0c;通过暖通设备为室内环境提供冷源和热源&#xff0c;从而调节室内温度环境&#xff0c;为人们提供舒适的生活环境。 旋钮式温控器更为结构简洁、操作简便&#xff0c;降低了用户的使用难度&#xff0c;提供智能化的控制方法&#xff0c;…

基于时空上下文(STC)的运动目标跟踪算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

java面试:常见的限流算法有哪些

1 什么是限流算法 限流算法是一种用于限制流量请求的频率或速率的算法&#xff0c;其目的是在高并发或大流量请求的情况下&#xff0c;保护系统服务的安全性和可用性。限流算法可以应对热点业务带来的突发请求、调用方bug导致的突发请求以及恶意攻击请求等情况。是一种系统保护…

使用 ONLYOFFICE API 构建 Java 转换器,在 Word 和 PDF 之间进行转换

文章作者&#xff1a;ajun 随着文档处理需求的增加&#xff0c;格式转换成为了一个重要的需求点。由于PDF格式具有跨平台、不易被篡改的特性&#xff0c;将Word格式(.docx)转换为PDF格式(.pdf)的需求尤为强烈。ONLYOFFICE作为一个强大的办公套件&#xff0c;提供了这样的转换功…

【Unity】CatlikeCoding SRP

Unity 自定义渲染管线 提示&#xff1a;基于CatlikeCoding SRP系列教程学习 学习链接&#xff1a;SRP 个人测试: Demo 相关记录以后有时间再更&#xff1a;

kotlin中使用ViewBinding绑定控件

kotlin中使用ViewBinding绑定控件 什么是ViewBinding&#xff1f; View Binding是Android Studio 3.6推出的新特性&#xff0c;主要用于减少findViewById的冗余代码&#xff0c;但内部实现还是通过使用findViewById。通过ViewBinding&#xff0c;可以更轻松地编写可与视图交互…

c++的学习之路:2、入门(1)

一、 C关键字 c的关键字要比c语言要多31个足足有63个&#xff0c;这里我只是了解了下每个有啥作用&#xff0c;具体使用方法以及更多的知识将在后续学习中&#xff0c;慢慢扩展使用&#xff0c;下方表格就是c的63个关键字 asmdoifreturntryautodoubleinlinetypedefdynamic_ca…

#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行

3 月 19 日&#xff0c;#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行。 现场&#xff0c;深圳市南山区人民政府副区长李志娜发布《2024 年南山区支持鸿蒙原生应用发展首批政策措施清单》&#xff0c;从加强鸿蒙原生应用供给能力、推动鸿蒙原生应用产业集聚、完善鸿蒙原生…

Go语言学习Day1:什么是Go?

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、走近Go①Go语言的Logo②Go语言的创始人③Go语…

【开源】SpringBoot框架开发知识图谱构建系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 知识图谱模块2.2 知识点模块2.3 学生测评模块2.4 学生成绩模块 三、系统展示四、核心代码4.1 查询知识点4.2 新增知识点4.3 查询知识图谱4.4 查询学生成绩4.5 查询学生成绩 五、免责说明 一、摘要 1.1 项目介绍 基于J…

PycharmJH码,Pycharm稳定专属JH码(全网最新)

以idea为例&#xff0c;其他JH类似哦 第一步&#xff1a;下载J活工具包 首先&#xff0c;请先进行下载J活工具&#xff0c;如果之前已经下载&#xff0c;请直接跳过此环节。 &#x1f447;&#x1f447;点击链接中的链接&#xff0c;回复“永久”即可获取永久包&#x1f447;…

jenkins Pipeline接入mysql

背景&#xff1a; jenkin pipeline进化过程如下&#xff1a; Jenkins Pipeline 脚本优化实践&#xff1a;从繁琐到简洁 >>>>> Jenkins Pipeline脚本优化&#xff1a;为Kubernetes应用部署增加状态检测>>>>>> 使用Jenkins和单个模板部署多个K…

天地一体化5G网络中LNA的辐射效应

Youssouf A S, Habaebi M H, Hasbullah N F. The radiation effect on low noise amplifier implemented in the space-aerial–terrestrial integrated 5G networks[J]. IEEE Access, 2021, 9: 46641-46651. 图2 面向卫星的5G综合网络架构方案 这篇论文《The Radiation Effect…

redis功能点

一、redis简介 概述 Redis 是速度非常快的非关系型&#xff08;NoSQL&#xff09;内存键值数据库&#xff0c;可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串&#xff0c;值支持五种数据类型&#xff1a;字符串、列表、集合、散列表、有序集合。 Redis 支持很…

粘度指数改进剂市场需求增长 为润滑油添加剂细分产品

粘度指数改进剂市场需求增长 为润滑油添加剂细分产品 粘度指数改进剂是一种油溶性高分子聚合物&#xff0c;主要用于提高润滑油粘度以及粘度指数。粘度指数改进剂具有稠化能力强、抗磨性好、热稳定性好等优势&#xff0c;可添加于液压油、内燃机油以及齿轮油等油品中。 …

dij最短路径算法

Dijkstra算法解决的是单源最短路径问题:对于给定的有向网络G=(V,E)及单个源点v,求从v到G的其余各顶点的最短路径。 本文以下面的有向网络(用邻接矩阵存储)为例,并假设源点为1。 #include<stdio.h> #define maxsize 1000 //表示两点间不可达,距离为无穷远 #define…

基于SSM+Jsp+Mysql的KTV点歌系统

基于SSMJspMysql的KTV点歌系统 基于SSMJspMysql的KTV点歌系统的设计与实现 开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工…

TikTok能不能用或许没那么重要,重要的是互联网的互联时代结束了

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 朱峰 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo TikTok与美国政府“掰头”了五年多&#xff0c;换来一纸看来肯定可以通过的法案&#xff0c;而这条法案&#xff0c;可能会影响到所有…

HMI界面之:教育培训领域的重要帮手

一、教育培训行业都有哪些HMI界面形式 HMI人机交互界面在教育培训领域有以下几种形式&#xff1a; 电子白板&#xff1a;电子白板是一种交互式的教学工具&#xff0c;可以让教师和学生在白板上进行书写、标注、绘图等操作&#xff0c;与计算机进行互动&#xff0c;提高教学效果…

能见度监测站介绍

TH-NJD50能见度监测站是一种专门用于监测和记录大气中能见度的设备站点。其工作原理主要基于光在大气中的衰减规律&#xff0c;通过透射仪向一定距离的接收器发射光束&#xff0c;接收器测量经过大气透射的光强&#xff0c;从而计算出能见度。能见度是气象学中一个重要的气象要…