QT 使用图表

目录

1、概念

[1.1 坐标轴-QAbstractAxis](#1.1 坐标轴-QAbstractAxis)

[1.2 系列-QAbstractSeries](#1.2 系列-QAbstractSeries)

[1.3 图例-Legend](#1.3 图例-Legend)

[1.4 图表-QChart](#1.4 图表-QChart)

[1.5 视图-QChartView](#1.5 视图-QChartView)

[2、 QT 折线图](#2、 QT 折线图)

[2.1 Qt 折线图介绍](#2.1 Qt 折线图介绍)

[2.2 Qt 折线图实现](#2.2 Qt 折线图实现)

Qt 图表是专门用来数据可视化的控件

Qt 图表包含折线、饼图、棒图、散点图、范围图等。

使用 Qt 图表时,需要添加 Qt += charts

包含头文件 #include

1、概念

1.1 坐标轴-QAbstractAxis

图表中,一般都有 X、Y 坐标轴,复杂一些的还带有 Z 轴。对应到 Qt 的图表也有 X、Y 轴对象。但是 今天,我们先不展开介绍。如果我们不创建轴坐标对应的对象,可以使用 Qt 的默认轴对象。后面我们会介绍用 法。

1.2 系列-QAbstractSeries

不论是曲线、饼图、棒图还是其他图表,其中展示的内容本质都是数据。一条曲线是一组数据,一个饼图也 对应一组数据。在 Qt Charts 中,这些一组组的数据被称作系列。对应不同类型的图表 Qt 提供了不同的系列。 系列除了负责存储、访问数据,应该还提供了数据的绘制方法,比如折线图和曲线图分别对应 QLineSerie 和 QSPLineSerie。我们可以用不同的系列达到不同的展示目的。

1.3 图例-Legend

类似于 Excel,Qt Charts 中也提供了图例,并且还可以显示或者隐藏图例。

1.4 图表-QChart

Qt 提供了 QChart 类来封装前面所说的内容,比如坐标轴、系列、图例等。QChart 承担了一个组织、管理 的角色。QChart 派生自 QGraphicsObject,因此它实际上是一个图元 item。我们可以从 QChart 获取到坐标轴对 象、数据系列对象、图例等等,并且可以设置图表的主题、背景色等样式信息。

1.5 视图-QChartView

负责 QChart 的展示。QChart 本身只负责图表内容的组织、管理。图表的展示由视图负责,这个视图就是 QChartView。QChartView 派生自 QGraphicsView,只是它专门提供了几个面向 QChart 的接口,比如 setChart (QChart*)等。


2、 QT 折线图

2.1 Qt 折线图介绍

Qt 折线图使用的类是 QlineSeries。

Qt 折线图包含如下几个部分: ① 坐标轴(x,y) ② 线条 ③ 参考背景线

2.2 Qt 折线图实现

Qt 折线图实现过程主要包括以下几个步骤:

  1. 新建一个 QChart 图表对象 chart;

  2. 往 chart 添加坐标轴(x,y 轴);

  3. 在 ui 里提升一个 QWidget 成 QChartView,作为 chart 的视图;

  4. 在 chart 里添加新的折线对象 QLineSeries(可添加多条)

  5. 添加数据

  6. 清除数据

一.新建一个 QChart 图表对象 chart

cs 复制代码
QChart *chart = new QChart();
 chart->legend()->setVisible(true);
 QFont font;
 font.setPixelSize(50);
chart->setTitleFont(font);
 chart->setTitle("小红体重曲线");//设置图表标题

二.往 chart 添加坐标轴(x 轴,y 轴)

cpp 复制代码
QValueAxis *axisX;
 axisX = new QValueAxis();
axisX->setTitleText("时间"); //设置坐标轴的标题
 axisX->setLabelFormat("%i"); //设置坐标格式,类似于 printf
axisX->setTickCount(10); //坐标被分成多少格
axisX->setRange(0, 60); //设置范围
//Bottom 是底部的意思,意思是坐标轴是放在底部的,也就是 X 轴
//相似的还有 Qt::AlignLeft...
chart->addAxis(axisX, Qt::AlignBottom);
QValueAxis *axisY;
 axisY = new QValueAxis();
 axisY->setTitleText("体重"); //设置坐标轴的标题
 axisY->setLabelFormat("%i"); //设置坐标格式
 axisY->setTickCount(5); //坐标被分成多少格
axisY->setRange(0, 200); //设置范围
chart->addAxis(axisY, Qt::AlignLeft);

三.在 ui 里提升一个 QWidget 成 QChartView,作为 chart 的视图;

四.在 chart 里添加新的折线对象 QLineSeries(可添加多条)

cpp 复制代码
line = new QLineSeries;
line->setName("体重曲线"); //设置线的名字
line->setColor(Qt::red); //设置线的颜色
 chart->addSeries(line); //把曲线加到图表里 //设置曲线遵循哪个坐标,它会自动
识别 x,y 轴,因为坐标轴里的 AlignBottom/AlignLeft 属性
line->attachAxis(axisX);
line->attachAxis(axisY);
ui->chartView->setChart(chart);//把拆线添加到控件

五.添加数据,使用定时器模拟

  1. 定时器初始化
cpp 复制代码
QTimer *timer = new QTimer(this);
 connect(timer, SIGNAL(timeout()), this, SLOT(slotTimeout()));
x = 0;
 timer->start(1000);
  1. 定时器槽函数
cpp 复制代码
void Widget::doTimeoutSlot()
{
 y = qrand() % 200; //生成随机数,范围在 200 以内,因为我们 y 轴最大是 200
 qDebug()<<"y="<<y;
 if(x > 60){
x = 0;
 line->clear();
 }else{
 line->append(x, y);
 x++;
 }
}

六.清除数据 line->clear();

相关推荐
盐焗鹌鹑蛋9 小时前
【C++】继承
开发语言·c++
栈溢出了9 小时前
Java Lambda 表达式笔记
java·开发语言·intellij-idea
zhixingheyi_tian9 小时前
一份GC日志的解读
java·开发语言
czhaii9 小时前
串口1中断收发-C语言-MODBUS协议
c语言·开发语言
apihz10 小时前
随机驾考题目(C 照科一 / 科四 2000+ 题)免费API调用教程
android·java·c语言·开发语言·网络协议·tcp/ip
matlab代码10 小时前
基于matlab人脸疲劳驾驶检测系统(可使用其它人脸视频)【源码39期】
开发语言·matlab·人脸疲劳检测
爱吃大芒果10 小时前
高密度数据可视化渲染:基于 ArkUI Grid 的状态热力图组件开发图纸
华为·信息可视化·harmonyos
zenithdev111 小时前
fastcache:为 Go 设计的低 GC 压力内存缓存
开发语言·其他·缓存·golang
想你依然心痛11 小时前
自定义RTOS内核:从零实现上下文切换与任务调度——汇编、PendSV
java·开发语言·汇编·pendsv
geovindu12 小时前
java:Abstract Factory Pattern
java·开发语言·后端·设计模式·抽象工厂模式·创建型模式