Qt 统计图编程

2024-07-12 1126阅读

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

学习基础

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

学习内容

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

1. 折线图: 

- 使用QLineSeries定义折线数据,添加多个坐标点 

- 使用QValueAxis创建X轴和Y轴

- 将系列和坐标轴添加到QChart中

- 设置属性如标题、线条样式等

- 添加到QChartView显示

2. 柱形图:

- 使用QBarSet定义每个组的柱数据  

- 使用QBarSeries添加多个QBarSet组成总系列

- 同样创建分类轴和值轴

- 可以采用堆积方式显示

- 其他设置与折线图类似

3. 饼图:

- 使用QPieSeries定义饼图序列  

- 通过QPieSlice添加多个扇形部分

- 设置每个扇形的名称、百分比和颜色

- 添加到QChart并使用QChartView显示

- 可以手动修改扇形的开始和长度Angle

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

话不多说直接开始上代码

项目效果

Qt 统计图编程

Qt 统计图编程

Qt 统计图编程

 核心代码

折线图

#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 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    //创建图表
    QChart * chart =new QChart;
    chart->setTitle("某某学校实验班高考成绩分数");
    //创建条形对象数据
    QBarSet* bar =new QBarSet("bar");
    *barattachAxis(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 
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)

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]