欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > QtChart1-基础入门

QtChart1-基础入门

2025/9/22 19:08:21 来源:https://blog.csdn.net/H520xcodenodev/article/details/141478949  浏览:    关键词:QtChart1-基础入门

Qt Charts概述

Qt Charts模块是一组易于使用的图标组件,它基于Qt的Graphice View架构,其核心组件是QChartViewQChartQChartView的父类是QGraphicsView,就是Graphics View架构中的视图组件,所以,QChartView是用于显示图标的视图。

QChart的继承关系如图:

https://imagehyj.oss-cn-hangzhou.aliyuncs.com/blog/20240824032139.png

可以看到,QChart是从QGraphicsItem继承而来的,所以,QChart是一种图形像。

QPolarChart是用于绘制极坐标图的图表类,它从QChart继承而来。

想要使用Qt Charts模块,必须在项目的配置文件重添加模块。

Qt += charts

在需要使用QtCharts的类的头文件或者源文件中,需要使用如下的包含语句:

#include <QtCharts>
using namespace QtCharts;

或者可以使用宏定义:

#include <QtCharts>
Qt_CHARTS_USE_NAMESPACE

简单的QChart绘图程序

首先用一个简单的例子来说明QChart绘图的基本原理。创建一个基于QMainWindow的应用程序,主窗口上不防止任何组件。在主窗口类中只定义一个createChart()函数,在主窗口的构造函数中调用此函数,如下:

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

createChart()函数用于创建图表,代码如下:

void MainWindow::createChart()
{// 创建图表QChartView* chartView = new QChartView(this); // 创建 ChartViewQChart* chart = new QChart(); // 创建 chartchart->setTitle("简单函数曲线");chartView->setChart(chart); // Chart添加到ChartViewthis->setCentralWidget(chartView);// 创建折线序列QLineSeries* series0 = new QLineSeries();QLineSeries* series1 = new QLineSeries();series0->setName("Sin");series1->setName("Cos");chart->addSeries(series0);chart->addSeries(series1);// 序列添加数值qreal t = 0, y1, y2, intv = 0.1;int cnt = 100;for (int i = 0; i < cnt; i++) {y1 = qSin(t);series0->append(t, y1);y2 = qSin(t + 20);series1->append(t, y2);t += intv;}// 创建坐标值QValueAxis* axisX = new QValueAxis();axisX->setRange(0, 10);axisX->setTitleText("time(secs)");QValueAxis* axisY = new QValueAxis();axisY->setRange(-2, 2);axisY->setTitleText("value");chart->setAxisX(axisX, series0);chart->setAxisY(axisY, series0);chart->setAxisX(axisX, series1);chart->setAxisY(axisY, series1);
}

在createChart()函数中,首先创建一个QChartView对象chartView,再创建一个QChart对象chart,将chart在chartVIew里显示,使用下面这行语句:

chartView->setChart(chart);

图表上用于显示数据的称为序列(series),这里使用折线序列QLineSeries,创建了两个QLineSeries类型的序列,并且将序列添加到chart中。

chart->addSeries(series0);
chart->addSeries(series1);

序列存储用来显示数据,所以需要为直线序列添加平面数据点的坐标数据。程序将生成正弦和余弦函数的数据作为序列数据。

序列好需要坐标轴,创建QValueAxis类型的坐标轴作为图表的X轴和Y轴,调用QChart的setAxisX()和setAxisY()函数为两个序列分别设置X轴和Y轴。

https://imagehyj.oss-cn-hangzhou.aliyuncs.com/blog/20240824034902.png

图表的主要组成部分

QChartView的功能

QChartView是QChart的视图组件,类似Graphics View架构中的QGraphicsView。实际上,在窗口设计界面上使用QChartView时,就是先放置一个QGraphicsView组件,然后升级为QChartView。

QChartView类定义的函数很少,只有下面几个。

  • void setChart(QChart* chart),设置一个QChart对象作为显示的图表。

  • QChart* chart(),返回QChartView当前设置的QChart类对象。

  • void setRubberBand(RubberBands &rubberBand),设置选择框的类型,即鼠标在视图组件上拖动选择范围的方式,是一个QChartView::RubberBand枚举类型的组合,QChartView::RubberBand枚举类型有以下几种取值:

    • QChartView::NoRubberBand:无选择框;

    • QChartView::VerticalRubberBand:垂向选择;

    • QChartView::HorizontalRubberBand:水平选择;

    • QChartView::RectangleRubberBand:矩形框选择。

  • RubberBands rubberBand(),返回设置的选择框类型。

序列

序列是数据的表现形式,上图就是两个QLineSeries类型的序列。序列的继承关系如下:

https://imagehyj.oss-cn-hangzhou.aliyuncs.com/blog/20240824045519.png

从上图可以看出序列类的继承关系,他们都是从QAbstractSeries类继承而来。折线、光滑曲线和散点的序列是从QXYSeries继承而来,用于绘制二维平面数据;QAbstractBarSeries派生出柱状图、百分比柱状图和堆叠图等图标的序列;面积图、火柴盒图、饼图的序列都是直接继承于QAbstractSeries

坐标轴

坐标轴类特点用途
QValueAxis数值坐标轴作为数值类型数据的坐标轴
QCategoryAxis分组数值坐标轴可以为数值范围设置文字标签
QLogValueAxis对数数值坐标轴作为数值类型数据的对数坐标轴,可以设置对数的基
QBarCategoryAsix类别坐标轴用字符串作为坐标轴的刻度,用于图表的非数值坐标轴
QDateTimeAxis日志时间坐标轴作为日期时间数据的坐标轴

https://imagehyj.oss-cn-hangzhou.aliyuncs.com/blog/20240824050537.png

图例

图例(Legend)是对图表上显示的序列的示例说明,有线条颜色和文字说明。QLegend是封装了图例控制功能的类,可以为每个序列设置图例中的文字,可以控制图例显示在图表的上、下、左、右不同位置。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词