当前位置: 首页 > news >正文

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)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Apache Seata分布式事务启用Nacos做配置中心
  • 禅道二次开发——禅道zentaoPHP框架扩展机制——对视图层(view)扩展
  • Linux账号和权限管理详解
  • 浅谈MMORPG的战斗系统
  • Mysql知识大全
  • ubuntu22.04 编译freetype动态库
  • 决策树算法介绍,原理与案例实现
  • 代码审查的艺术:Xcode的深度指南与实战技巧
  • Autosar诊断实战系列28-2E写DID Pending期间偶发回NRC0x13问题排查
  • 学习笔记——动态路由——IS-IS中间系统到中间系统(特性之路由撤销)
  • 网络安全第一次作业
  • maven——(重要)手动创建,构建项目
  • 部署YUM仓库及NFS共享功能
  • docker拉取镜像-配置阿里云镜像加速
  • Python | Leetcode Python题解之第229题多数元素II
  • CentOS 7 防火墙操作
  • dva中组件的懒加载
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 来,膜拜下android roadmap,强大的执行力
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 一个JAVA程序员成长之路分享
  • 【干货分享】dos命令大全
  • const的用法,特别是用在函数前面与后面的区别
  • MPAndroidChart 教程:Y轴 YAxis
  • 回归生活:清理微信公众号
  • ​什么是bug?bug的源头在哪里?
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # .NET Framework中使用命名管道进行进程间通信
  • $.proxy和$.extend
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (回溯) LeetCode 40. 组合总和II
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (十八)SpringBoot之发送QQ邮件
  • (四)stm32之通信协议
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转载)Linux网络编程入门
  • .bat文件调用java类的main方法
  • .gitattributes 文件
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .net 7 上传文件踩坑
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Core跨平台微服务学习资源
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .NET Micro Framework初体验(二)
  • .net MySql
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .NET中分布式服务
  • ??javascript里的变量问题
  • @ComponentScan比较
  • @Data注解的作用
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [16/N]论得趣