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)
相关文章:
Qt 统计图编程
学习目标:Qt 折线图,柱形图和扇形统计图编程 学习基础 Qt QChart 曲线图表操作-CSDN博客 学习内容 Qt中绘制三种常见的图表非常方便, 主要步骤如下: 1. 折线图: - 使用QLineSeries定义折线数据,添加多个坐标点 - 使用QValueAxis创建X轴和Y轴 - 将…...
SQL中的谓词与谓词下推
在 SQL 查询中,谓词(Predicate)是用来对数据进行过滤的条件。它们决定了数据从数据库表中被选择的条件。理解和正确使用 SQL 谓词对于编写高效查询至关重要。 目录 什么是谓词?一个真实的故事SQL 谓词的代码示例比较谓词逻辑谓词…...
浅聊授权-spring security和oauth2
文章目录 前言自定义授权spring security授权oauth2授权概述 前言 通常说到授权,就会想到登录授权、token令牌、JWT等概念,授权。顾名思义就是服务器授予了客户端访问资源的权益,那么要实现授权有几种方案呢,三种授权方式在公司项…...
时间复杂度计算
目录 时间复杂性 ⼤O的渐进表⽰法 时间复杂性 定义:在计算机科学中,算法的时间复杂度是⼀个函数式T(N),它定量描述了该算法的运⾏时间。 时间复杂度是衡量程序的时间效率,那么为什么不去计算程序的运⾏时间呢? 1.…...
React 18 + Babel 7 + Webpack 5 开发环境搭建
文章目录 一、基础开发环境搭建1. 新建项目目录2. 项目目录结构及内容3. 安装 React 18 Babel 7 Webpack 54. 配置 Babel 和 Webpack5. 调试/构建项目 二、扩展项目支持的能力(待补充)1. JS 扩展(待补充)2. CSS 扩展(…...
MongoDB Shard 集群 Docker 部署
MongoDB Shard Docker 部署 部署环境 主机地址主机配置主机系统Mongodb1/192.168.31.1352CPU 4GBDebian12Mongodb2/192.168.31.1092CPU 4GBDebian12Mongodb3/192.168.31.1652CPU 4GBDebian12 镜像版本 mongodb/mongodb-community-server:5.0.27-ubuntu2004 部署集群 部署…...
MacOS 开发 — Packages 程序 macOS新版本 演示选项卡无法显示
MacOS 开发 — Packages 程序 macOS新版本 演示选项卡无法显示 问题描述 : 之前写过 Packages 的使用以及如何打包macOS程序。最近更新了新的macOS系统,发现Packages的演示选项卡无法显示,我尝试从新安转了Packages 也是没作用,…...
Hive的分区表分桶表
1.分区表: 是Hive中的一种表类型,通过将表中的数据划分为多个子集(分区),每个分区对应表中的某个特定的列值,可以提高查询性能和管理数据的效率。分区表的每个分区存储在单独的目录中,分区的定义…...
PostgreSQL17索引优化之支持并行创建BRIN索引
PostgreSQL17索引优化之支持并行创建BRIN索引 最近连续写了几篇关于PostgreSQL17优化器改进的文章,其实感觉还是挺有压力的。对于原理性的知识点,一方面是对这些新功能也不熟悉,为了尽可能对于知识点表述或总结做到准确,因此需要…...
在Vue中,子组件向父组件传递数据
在Vue中,子组件向父组件传递数据通常通过两种方式实现:事件和回调函数。这两种方式允许子组件与其父组件进行通信,传递数据或触发特定的行为。 1. 通过事件传递数据 子组件可以通过触发自定义事件,并将数据作为事件的参数来向父组…...
数据结构(顺序表)
谈起顺序表,那我们就不得不先来了解一下它的上级概念---线性表 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列…...
MySQL之基本查询(上)-表的增删查改
目录 Create(创建) 案例建表 插入 单行数据 指定列插入 单行数据 全列插入 多行数据 全列插入 插入是否更新 插入时更新 替换 Retrieve(读取) 建表插入 select列 全列查询 指定列查询 查询字段为表达式 为查询结果指定别名 结果去重 where条件 比较运算符 逻辑运…...
RocketMQ源码学习笔记:Producer发送消息流程
这是本人学习的总结,主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Overview2、验证消息3、查找路由4、选择消息发送队列4.1、选择队列的策略4.2、源码阅读4.2.1、轮询规避4.2.2、故障延迟规避4.2.2.1、计算规避时间4.2.2.2、选择队列 4.2.3、ThreadLocal的…...
kotlin flow collect collectLatest 区别
在 Kotlin 协程库中,collect 和 collectLatest 都是用于收集 Flow 中发射的数据的方法,但它们在处理数据和响应新数据的方式上有所不同。 collect collect 是一个挂起函数,用于收集 Flow 中发射的所有数据。它会按顺序处理每一个发射的数据…...
ELK集群搭建
ELK集群搭建 文章目录 ELK集群搭建1.环境准备2.Elasticsearch环境搭建1.创建es账户并设置密码2.选择对应版本进行下载3.编辑配置文件4.设置JVM堆大小 #7.0默认为4G5.创建es数据及日志存储目录6.修改安装目录和存储目录权限 3.系统优化1.增加最大文件打开数2.增加最大进程数3.增…...
zookeeper+kafka消息队列集群部署
一.消息队列 1、什么是消息队列 消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(MessageQueue)是一种在软件系统中用…...
LLM_入门指南(零基础搭建大模型)
本文主要介绍大模型的prompt,并且给出实战教程。即使零基础也可以实现大模型的搭建。 内容:初级阶段的修炼心法,帮助凝聚和提升内力,为后续修炼打下基础。 1、prompt 1.1含义和作用 prompt就是提示工程的意思。在大型语言模型中…...
Element Plus 与 Vue 3:构建现代化 Web 应用的完美搭档
引言 Element Plus是基于Vue 3的组件库,它继承了Element UI的优秀基因,为Vue 3应用提供了丰富的界面组件。Element Plus不仅拥有与Element UI相同的高质量组件,还针对Vue 3进行了优化和更新,确保了与Vue 3的无缝集成。 环境准备…...
线程间通信与变量修改感知:几种常用方法
线程间通信与变量修改感知:几种常用方法 1. 使用volatile关键字2. 使用synchronized关键字3. 使用wait/notify/notifyAll机制4. 使用轮询(Polling) 💖The Begin💖点点关注,收藏不迷路💖 在Java…...
前后端通信 —— HTTP/HTTPS
目录 一、HTTP/HTTPS 简介 1、HTTP 2、HTTPS 二、HTTP 工作过程 三、HTTP 消息 1、HTTP消息结构 2、HTTP消息示例 四、HTTP 方法(常用) 1、GET 2、POST 3、PUT 4、DELETE 5、GET与POST对比 五、HTTP 状态码(常用) …...
保姆级教程:从官网下载到成功运行,手把手搞定CANoe 16.0安装(附常见报错排查)
CANoe 16.0安装全攻略:从零开始到完美运行的避坑指南 第一次接触CANoe 16.0时,很多人会被复杂的安装流程和各种报错搞得焦头烂额。作为汽车电子领域最常用的网络测试工具之一,CANoe的安装过程确实比普通软件要复杂得多——从官网下载的正确姿…...
DENSO电装机器人软件授权序列号 wincaps3软件授权和软件安装包及软件手册
DENSO电装机器人软件授权序列号 wincaps3软件授权和软件安装包及软件手册 永久使用序列号 给机器人工程师的WinCaps3安装避坑指南 最近在调试DENSO机械臂的时候,发现不少同行在WinCaps3的安装和授权环节翻车。今天就结合自己的踩坑经验,聊聊怎么搞定这个…...
用Python+OpenCV重构九点标定:抛弃Halcon的轻量化视觉方案
PythonOpenCV九点标定实战:从原理到嵌入式部署的全栈指南 引言:为什么选择开源方案替代Halcon? 在工业视觉领域,九点标定作为连接像素坐标与物理坐标的桥梁,直接影响着定位精度和系统稳定性。传统方案多依赖Halcon等商…...
实战指南:基于快马平台构建企业级openclaw启动框架,涵盖多任务与监控
实战指南:基于快马平台构建企业级openclaw启动框架,涵盖多任务与监控 在实际项目中,openclaw作为一款强大的数据抓取工具,其启动过程往往需要适配复杂的业务场景。传统的单任务启动方式已经无法满足企业级需求,我们需…...
Unity VideoPlayer常见报错解析:First video frame not zero与Color Standard问题实战
1. 解析"First video frame not zero"报错 遇到Unity VideoPlayer报出"First video frame not zero"时,很多开发者会一头雾水。这个错误直译过来就是"第一帧视频不是从零开始的",听起来有点抽象。我用个生活中的例子解释&…...
gallery性能分析工具:找出本地AI平台的性能瓶颈
gallery性能分析工具:找出本地AI平台的性能瓶颈 【免费下载链接】gallery A gallery that showcases on-device ML/GenAI use cases and allows people to try and use models locally. 项目地址: https://gitcode.com/GitHub_Trending/gallery44/gallery 在…...
新手编程入门:用快马AI快速生成你的第一个龙虾美食展示网页
今天想和大家分享一个特别适合编程新手的实践项目——用纯HTML和CSS制作一个龙虾美食展示网页。作为一个刚入门的前端学习者,我发现这个项目既能巩固基础,又能做出看得见的成果,特别有成就感。 项目构思与结构设计 首先明确网页的基本框架。…...
httpspider全局抓包,直接抓取下载模拟器 手机 平板 电视中的数据(视频 音乐 直播
httpspider可以抓取所有经过电脑的所有http和https数据,比如 抓取安卓模拟器,其他电脑软件,而且还可以直接抓取手机中的流量。先看效果图抓模拟器:抓手机:分享了「httpspider.exe」 链接:https://pan.quark…...
告别死记硬背:用GitHub笔记和实战思维重新理解电路与电子学
告别死记硬背:用GitHub笔记和实战思维重新理解电路与电子学 电路与电子学这门课,常常让计算机专业的学生又爱又恨。爱的是它揭示了计算机硬件底层的奥秘,恨的是那些繁琐的公式和抽象的概念。但问题真的出在课程本身吗?或许我们需…...
从FLOPS到TOPS:深入解析算力单位及其在AI芯片中的应用
1. 算力单位:从FLOPS到TOPS的进化史 第一次接触FLOPS这个术语时,我正试图比较两款显卡的性能。当时完全被各种"FLOP"搞晕了头,直到后来在实际项目中调试AI模型时,才真正理解了这些算力单位背后的意义。FLOPS࿰…...
