Qt 统计图编程

学习目标:Qt 折线图,柱形图和扇形统计图编程

学习基础

Qt QChart 曲线图表操作-CSDN博客

学习内容

Qt中绘制三种常见的图表非常方便, 主要步骤如下:

1. 折线图: 

- 使用QLineSeries定义折线数据,添加多个坐标点 
- 使用QValueAxis创建X轴和Y轴
- 将系列和坐标轴添加到QChart中
- 设置属性如标题、线条样式等
- 添加到QChartView显示

2. 柱形图:

- 使用QBarSet定义每个组的柱数据  
- 使用QBarSeries添加多个QBarSet组成总系列
- 同样创建分类轴和值轴
- 可以采用堆积方式显示
- 其他设置与折线图类似

3. 饼图:

- 使用QPieSeries定义饼图序列  
- 通过QPieSlice添加多个扇形部分
- 设置每个扇形的名称、百分比和颜色
- 添加到QChart并使用QChartView显示
- 可以手动修改扇形的开始和长度Angle

Qt Chart提供了很友好的接口实现各种常见图表。开发者只需熟悉这几个关键类,就可以方便绘制不同需求的图表。它使用户界面的数据可视化开发工作效率得到很大提升。

话不多说直接开始上代码

项目效果

 核心代码

折线图

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


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

    //创建图表
    QChart* chart =new QChart;
    chart->setTitle("全球各国军费增长折线图"); // 设置标题名称
    ui->graphicsView->setChart(chart);

    //设置坐标
    QValueAxis* ax =new QValueAxis;
    ax->setTitleText("年份");
    ax->setRange(2018,2022);
    ax->setTickCount(5); //设置刻度 即年份总个数
    ax->setLineVisible(true); //网格
    ax->setGridLineVisible(true);//网格线均可见

    QValueAxis *ay =new QValueAxis;
    ay->setTitleText("军费(万亿)");
    ay->setRange(3000,10000);
    ay->setTickCount(5);
    ay->setLineVisible(true);
    ay->setGridLineVisible(true);

    //绘画折线
    QLineSeries* series =new QLineSeries;
    series->setName("中国");
    series->setColor(Qt::red);
    // 添加数据点到序列
    series->append(2018,6500);
    series->append(2019,4900);
    series->append(2020,8000);
    series->append(2021,9000);
    series->append(2022,9500);

    QLineSeries* series2 =new QLineSeries;
    series2->setName("俄罗斯");
    series2->setColor(Qt::green);
    // 添加数据点到序列
    series2->append(2018,4500);
    series2->append(2019,4900);
    series2->append(2020,9000);
    series2->append(2021,10000);
    series2->append(2022,10000);

    //加入到图表
    chart->addSeries(series);
    chart->setAxisX(ax,series);
    chart->setAxisY(ay,series);

    chart->addSeries(series2);
    chart->setAxisX(ax,series2);
    chart->setAxisY(ay,series2);
}

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

柱形图

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    //创建图表
    QChart * chart =new QChart;
    chart->setTitle("某某学校实验班高考成绩分数");


    //创建条形对象数据
    QBarSet* bar =new QBarSet("bar");
    *bar<<560<<710<<599<<688<<701;

    //绘画条形
    QStackedBarSeries* series =new QStackedBarSeries;
    series->append(bar);



    QStringList strlist={"小王","小李","小吴","小张","小赵"};

    //创建x y轴 通过QBarCategoryAxis类将类型添加到图表的轴
    QBarCategoryAxis* ax =new QBarCategoryAxis;
    ax->setTitleText("考生姓名");
    ax->append(strlist);

    QValueAxis* ay =new QValueAxis;
    ay->setTitleText("高考总分阶梯");
    ay->setRange(0,750);



    chart->addSeries(series);
    chart->addAxis(ax,Qt::AlignBottom);
    chart->addAxis(ay,Qt::AlignLeft);

    series->attachAxis(ax);
    series->attachAxis(ay);

    chart->legend()->setVisible(false); // 设置绘图区与图表边界
    chart->legend()->setAlignment(Qt::AlignBottom);

    QChartView* view = new QChartView;
    view->setChart(chart);

    w.setWindowTitle("高考成绩--柱状图表展示");
    w.setCentralWidget(view);
    w.resize(800,500);

    w.show();


    return a.exec();
}

饼形图

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    //创建饼状图绘画对象
    QPieSeries* series =new QPieSeries;
    // 占用比例
    series->append("70分以下:30%",30);
    series->append("70分-85分:40%",40);
    series->append("86分-99分:25%",25);
    series->append("100分:5%",5);
    series->setLabelsVisible(true);// 设置标签属性,可见

    QPieSlice* s1=series->slices().at(0);
    QPieSlice* s2=series->slices().at(1);
    QPieSlice* s3=series->slices().at(2);
    QPieSlice* s4=series->slices().at(3);

    s1->setColor(Qt::red);
    s2->setColor(Qt::green);
    s3->setColor(Qt::yellow);
    s4->setColor(Qt::black);

    //创建图表
    QChart* chart =new QChart;
    chart->addSeries(series);
    chart->setTitle("饼图形状--班级考试百分制整数比例");

    //创建图表视图
    QChartView* view =new QChartView;
    view->setChart(chart);


    w.setCentralWidget(view);
    w.resize(600,600);

    w.show();
    return a.exec();
}

总结

总的来说,通过这个示例可以很清楚地了解QT中的图表绘制过程:

1. 首先创建相应的图表对象,如QLineChart、QBarChart、QPieChart等。设置标题、属性等。

2. 定义数据模型,如QLineSeries、QBarSeries、QPieSeries等,用于存储图表的数据点。 

3. 添加具体的数据到系列对象中,如坐标点、分类数据、占比等。

4. 创建坐标轴对象QValueAxis和QCategoryAxis,配置名称、范围等。 

5. 将系列与坐标轴添加到图表对象中,实现数据与轴的关联。

6. 创建QChartView视图对象,设置图表给视图即可渲染展示。

7. 另外可以对分量设置个性化属性,如颜色、标签等。

通过极少量API调用,就可以绘制出丰富的线性图、柱状图、饼图等不同图表类型。这说明QT Chart的设计理念非常清晰、使用也很简单易上手。开发人员可以根据实际需求,通过组合这些基础类快速实现各种数据可视化工作。这无疑大大提升了开发效率。

最后附上源代码链接
对您有帮助的话,帮忙点个star

Qt demo: 学习qt过程 (gitee.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值