《二十》Qt QChart图标的使用

一、相关类的介绍

1、QChartView

视图组件(画布),无法单独进行显示,需要依附其他组件进行显示,如在窗口设计界面先放置一个QGraphicsView组件,然后升级为QChartView;随后QChartView通过setChart将QChart添加为显示的图表。

2、QChart

代表一个图表对象,可以包含一个或多个QAbstractSeries(系列)对象。它提供了管理和控制图表的方法,如添加/移除系列、设置图表标题、轴标签等。

3、QAbstractSeries

是所有系列类的基类,代表图表中的一个系列。派生类包括QLineSeries(线性系列)、QScatterSeries(散点系列)、QBarSeries(柱状系列)等。每个系列可以包含一个或多个数据点,并且可以设置系列的样式、颜色、图例等属性。

4、QLineSeries

行序列,数据的表现形式,也就是我们要显示的数据,例如折线图。一般是通过QChart的addSeries将QLineSeries添加到图表中,当然不止QLineSeries,还有其他很多类型。

5、QValueAxis

坐标轴。具体使用步骤为:①使用QChart的addAxis将坐标轴添加到图表上;②使用QLineSeries的attachAxis设置数据与坐标轴的关系;注意这两步设置有先后关系,必须先将坐标轴添加到QChart,如果顺序反了会提示没有与之关联的坐标轴。

6、QScatterSeries

代表图表中的散点系列,用于绘制散点图。可以通过添加数据点来构建散点系列,也可以设置散点的样式和颜色。

7、QBarSeries

代表图表中的柱状系列,用于绘制柱状图。可以通过添加数据点来构建柱状系列,也可以设置柱子的样式和颜色。

8、QAbstractAxis

是所有轴类的基类,代表图表中的一个轴。派生类包括QValueAxis(数值轴)和QCategoryAxis(分类轴)。每个轴可以设置轴范围、刻度间隔、标签等属性。

9、QCategoryAxis

代表图表中的分类轴,用于显示离散的类别。可以设置轴的类别列表、标签格式等属性。

 二、封装的图表类型

QtCharts 可以绘制以下类型的图表:

1、折线图(Line Chart):用于显示数据的趋势和变化,通过连接数据点形成折线。

2、散点图(Scatter Chart):用于展示数据点的分布情况,每个数据点在坐标系中独立显示。

3、柱状图(Bar Chart):用于比较多个类别或数据组之间的数值差异,使用矩形柱子表示。

4、条形图(Horizontal Bar Chart):类似于柱状图,但是柱子是横向排列的。

5、饼图(Pie Chart):用于展示数据占比情况,通过扇形的大小表示不同数据的相对比例。

6、区域图(Area Chart):用于显示数据的累积变化情况,通过填充区域来表达数据的范围。

7、股票图(Stock Chart):用于展示股票市场的价格数据,包括开盘价、收盘价、最高价、最低价等。

8、散点线图(Spline Chart):类似于散点图,但是通过平滑的曲线连接数据点,更加强调数据的变化趋势。

9、曲线图(Spline Series Chart):用于平滑地显示数据的变化情况,通过插值算法计算平滑曲线。

10、雷达图(Radar Chart):用于展示多个数据维度之间的相对关系,通过多边形的面积来表示数据的相对大小。

 这次我们讲解其中几个。

三、开始步骤

1、打开.pro文件,输入Qt += charts,引入Qt Charts模块; 

2、打开ui设计器,选择一个Graphics View控件,鼠标右键提升为

 

 

4、在窗口右上角就可以看见控件类型变成QChartView了,然后将控件命名为chartView。

5、在代码中添加QtCharts头文件,引入命名空间

四、QChart设置  

QChart类的主要函数

图表外观

void setTitle() 设置图表标题,显示在图表上方,支持HTML格式
void setTitleFont()设置图表标题字体
void setTitleBrush() 设置图表标题画刷
void setTheme()设置主题,主题是内置的UI设置,定义了图表的配色
void setMargins() 设置绘图区与图表边界的4个边距
QLegend* legend()返回图表的图例,是一个QLegend类的对象
void setAnimationOptions() 设置序列或坐标轴的动画效果
数据序列void addSeries()添加序列
QList<QAbstractSeries*>series()返回图表拥有的序列的列表
void removeSeries()移除一个序列,但并不删除序列对象
void removeAllSeries()移除并删除图表的所有序列

坐标轴    
    
    
    
   
      
 

 void addAxis()  为图表的某个反向添加坐标轴
QList<QAbstractAxis *>axes()返回某个方向的坐标轴列表
void setAxisX()设置某个序列的水平方向的坐标轴
void setAxisY()设置某个序列的垂直方向的坐标轴
void rmoveAxis() 移除一个坐标轴
void createDefaultAxes()根据已添加的序列的类型,创建缺省的坐标轴,前面已有的坐标轴会被删除

void setAnimationOptions(AnimationOptions options)函数设置图表的动画效果,输入参数是QChart::AnimationOption枚举类型,有以下几种类型:

QChart::NoAnimation,无动画效果
QChart::GridAxisAnimation,背景网格有动画效果
QChart::SeriesAnimation,序列有动画效果
QChart::AllAnimation,都有动画效果

五、QValueAxis坐标轴的创建  

QValueAxis类的主要函数

 

总结:

在Qt的QChart中,可以使用以下两种方式来设置坐标轴:

1、使用addAxis()方法:在这种方式下,轴对象可以在图表中独立于系列添加和移除,因此可以在图表中灵活地管理和控制不同的轴。

2、使用setAxisX()和setAxisY()方法:在这种方式下,每个图表只能有一个X轴和一个Y轴,并且会自动将系列与这些轴关联起来。当添加新的系列时,它们会自动使用已设置的X轴和Y轴。

总体而言,使用addAxis()方法可以在图表中添加多个轴,并且可以更灵活地管理不同的轴。而使用setAxisX()和setAxisY()方法则适用于只需要一个X轴和一个Y轴的简单情况,并且可以自动关联系列和轴。选择使用哪种方式取决于你的需求和使用场景。

六、QChart绘图一般步骤 

1、创建QChartView画布

2、创建QChart图表

3、创建序列

4、创建QValueAxis坐标轴(部分图表不用,例如:饼状图)

5、配置序列(坐标轴)、设置序列(坐标轴)参数、添加数据等

6、将序列加入图表

7、将坐标轴加入图表

8、关联xy轴(部分图表不用,例如:饼状图),将图表和自己创建的xy轴关联

9、将图表QChart加入QChartView画布中

示例:折线图

 QLineSeries类的主要函数

 

#include "widget.h"
#include "ui_widget.h"

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

    //调用函数
    myselfLineSeriesFunc();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::myselfLineSeriesFunc()
{
    //实例化图标QChart对象
    QChart *chart=new QChart;

    //创建线条

    QLineSeries *lineSeries1 = new QLineSeries;
    QLineSeries *lineSeries2 = new QLineSeries;

    lineSeries1->setName("正弦曲线");
    lineSeries2->setName("折线");

    int i;//sin的步长,横坐标
    for(i=-60;i<61;i++){
        qreal j = qSin(i);
        lineSeries1->append(i,j);
    }

    // 添加折线数据
    qsrand(QTime::currentTime().second());
    for(int i = 0; i <= 20; i++) {
        qreal x = i;
        qreal y = qrand()%100;
        lineSeries2->append(x, y);
    }

    //将线条加入图表
    chart->addSeries(lineSeries1);
    chart->addSeries(lineSeries2);

    QValueAxis *x_axis=new QValueAxis;
    x_axis->setRange(-60,60);//设置范围
    x_axis->setTickCount(13);//设置刻度个数

    QValueAxis *y_axis=new QValueAxis;
    y_axis->setRange(-60,60);//设置范围
    y_axis->setTickCount(13);//设置刻度个数
}

 运行如下:

感谢阅读!!!!!!

更多细节请看:Qt之QChart使用-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值