QChart中柱形图的简单使用并实现【Qt】

预备工作

  如果qt没下载去下载一个,下载太慢了可以试试它[点击跳转]  (https://blog.csdn.net/qq_19319481/article/details/131655379)。
  如果已经下载了qt发现自己的组件中没有QCharts,可以去试试它点击跳转。

  都搞定了以后在pro文件里面添加QT += charts,如果是qmake的话是前面这个步骤,如果是cmake,可以自行去查找,没有添加就会报错,不要忘记这块就好。

然后添加头文件:
在这里插入图片描述
一些教程上是#include <QtCharts>,当然也没有问题:
在这里插入图片描述
  可以将QChart视为场景,不可见,使用来装载和管理柱形,折线等图表元素,但不可将其完全视为场景。
  下面这是将QChart添加进QChartView
在这里插入图片描述
下面这是没有将QChart添加进QChartView:
在这里插入图片描述
  可以对比看出来QChart是不可见的。
  需要使用QChartView来将QChart显示出来,下面是初始过程:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QChart *chart = new QChart();QChartView *chartView = new QChartView(this);chartView->setGeometry(x(),y(),width(),height());chartView->setChart(chart);
}Widget::~Widget()
{delete ui;
}

  一个二维图表的基础是轴,x,y轴,我们用QValueAxis类得到轴,并且可以对轴进行一些处理。

QValueAxis *xAxis = new QValueAxis();QValueAxis *yAxis = new QValueAxis();xAxis->setRange(0,100);yAxis->setRange(0,50);chart->addAxis(xAxis, Qt::AlignBottom);chart->addAxis(yAxis, Qt::AlignLeft);

  运行后得到:
在这里插入图片描述
  这是QValueAxis类的成员函数,上面我们为轴设置了范围,如果想设置轴的刻度线数量,可以:
在这里插入图片描述

xAxis->setTickCount(10);
yAxis->setTickCount(5);

在这里插入图片描述
目前看到我们的轴标签(轴下面的文字)是1位小数,我们可以通过setLabelFormat函数来修改格式:

xAxis->setLabelFormat("%d");
yAxis->setLabelFormat("%d");

在这里插入图片描述
参数跟C语言的printf里面的参数格式一样:%d,%f…

QValueAxis类的主要函数解释
void setVisible()设置坐标轴可见性
Qt::Orientation orientation()返回坐标轴方向
void setMin()设置坐标轴最小值
void setMax()设置坐标轴最大值
void setRange()设置坐标轴最小、最大值表示的范围
void setTitleVisible()设置轴标题的可见性
void setTitleText()设置轴标题的文字
void setTitleFont()设置轴标题的字体
void setTitleBrush()设置轴标题的画刷
void setLabelFormat()设置标签格式,例如可以设置显示的小数点位数
void setLabelsAngle()设置标签的角度,单位为度
void setLabelsBrush()设置标签的画刷
void setLabelsColor()设置标签文字颜色
void setLabelsFont()设置标签文字字体
void setLabelsVisible()设置轴标签文字是否可见
void setTickCount()设置坐标轴主刻度个数
void setLineVisible()设置轴线和刻度线的可见性
void setLinePen()设置轴线和刻度线的画笔
void setLinePenColor()设置轴线和刻度线的颜色
void setGridLineColor()设置网格线的颜色
void setGridLinePen()设置网格线的画笔
void setGridLineVisible()设置网格线的可见性
void setMinorTickCount()设置两个主刻度之间的次刻度的个数
void setMinorGridLineColor()设置次网格线的颜色
void setMinorGridLinePen()设置次网格线的画笔
void setMinorGridLineVisible()设置次网格线的可见性

现在整个柱状图还差2维坐标系里面的柱形元素:

QBarSeries *barSeries = new QBarSeries;QBarSet *set0 = new QBarSet("第一季度");QBarSet *set1 = new QBarSet("第二季度");QBarSet *set2 = new QBarSet("第三季度");QBarSet *set3 = new QBarSet("第四季度");*set0 << 14;*set1 << 23;*set2 << 8;*set3 << 34;barSeries->append(set0);barSeries->append(set1);barSeries->append(set2);barSeries->append(set3);chart->addSeries(barSeries);

运行后:
在这里插入图片描述
发现柱形的位置不对,看了QBarAxis的成员函数,查了资料,一直都不能解决,直到…

也就是
在这里插入图片描述
只添加了一个BarSet,运行得到:
在这里插入图片描述
突然豁然开朗,BarSet不就是Bar的集合嘛,Bar不就是一个柱子嘛,所以应该这样:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QChart *chart = new QChart();QChartView *chartView = new QChartView(this);chartView->setGeometry(x(),y(),width(),height());QBarCategoryAxis *xAxis = new QBarCategoryAxis();QValueAxis *yAxis = new QValueAxis();yAxis->setRange(0,100);yAxis->setTickCount(10);yAxis->setLabelFormat("%d");chart->addAxis(xAxis, Qt::AlignBottom);chart->addAxis(yAxis, Qt::AlignLeft);QBarSeries *barSeries = new QBarSeries;QStringList catergory;catergory << "第一季度" << "第二季度" << "第三季度" << "第四季度" ;xAxis->append(catergory);QBarSet *set0 = new QBarSet("aa");*set0 << 14 << 34 << 12 << 9;barSeries->append(set0);barSeries->attachAxis(xAxis);chart->addSeries(barSeries);chartView->setChart(chart);
}Widget::~Widget()
{delete ui;
}

运行得到:
在这里插入图片描述
如果我们写两个BarSet的话:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QChart *chart = new QChart();QChartView *chartView = new QChartView(this);chartView->setGeometry(x(),y(),width(),height());QBarCategoryAxis *xAxis = new QBarCategoryAxis();QValueAxis *yAxis = new QValueAxis();yAxis->setRange(0,100);yAxis->setTickCount(10);yAxis->setLabelFormat("%d");chart->addAxis(xAxis, Qt::AlignBottom);chart->addAxis(yAxis, Qt::AlignLeft);QBarSeries *barSeries = new QBarSeries;QStringList catergory;catergory << "第一季度" << "第二季度" << "第三季度" << "第四季度" ;xAxis->append(catergory);QBarSet *set0 = new QBarSet("aa");QBarSet *set1 = new QBarSet("bb");*set0 << 14 << 34 << 12 << 9;*set1 << 14 << 34 << 12 << 9;barSeries->append(set0);barSeries->append(set1);barSeries->attachAxis(xAxis);chart->addSeries(barSeries);chartView->setChart(chart);
}Widget::~Widget()
{delete ui;
}

运行后:
在这里插入图片描述

这时才明白过来。


         新人创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/464632.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能语音机器人智能在哪里?AI人工智能电话机器人部署

随着科技的不断进步&#xff0c;人工智能已经成为了我们生活中不可或缺的一部分。AI人工智能机器人电话正是其中的一种形式&#xff0c;可以帮助企业或组织更好地实现电话营销的目标&#xff0c;那么智能语音机器人智能在哪里?我们来看看&#xff1a; 智能语音机器人&#xf…

UI自动化测试 —— CSS元素定位实践!

前言 自动化测试元素定位是指在自动化测试过程中&#xff0c;通过特定的方法或策略来准确识别和定位页面上的元素&#xff0c;以便对这些元素进行进一步的操作或断言。这些元素可以是文本框、按钮、链接、图片等HTML页面上的任何可见或不可见的组件。 在自动化测试中&#xf…

Unity 使用Netcode实现用户登录和登出

Unity之NetCode for GameObjets 基本使用 说明思路相关API代码实现Tips 说明 最近项目需要联机&#xff0c;项目方案选用Unity提供的NetCode for GameObjets&#xff08;以下简称NGO&#xff09;&#xff0c;踩了不少坑&#xff0c;本文不介绍基础使用&#xff0c;围绕双端&…

专业网页设计服务重要是什么

当在搜索引擎中键入“网页设计”&#xff0c;您将获得超过2000万个相关结果。在如此众多的网站制作公司中&#xff0c;应该如何做出明智的选择呢&#xff1f;首先&#xff0c;让我们深入探讨一下网页设计的重要性。网站设计需要综合各种不同领域的专业知识&#xff0c;它是一个…

【UART异步串口协议及verilog实现】

UART异步串口协议 1 UART1.1 数据格式1.2 波特率 2 UART的发送和接收模块2.1 uart发送模块2.2 uart的接收模块 【博客首发于微信公众号《 漫谈芯片与编程》】 本篇文章介绍常用的芯片外围低速协议&#xff1a;UART&#xff1b; 1 UART UART是异步串行传输协议&#xff0c;即…

彻底解决idea不识别java项目

需求背景 下载了一个java swing的项目,通过idea导入后,项目无法识别。打开java文件,也不会报错,也不编译。 无法识别效果图 可以看到左侧的菜单,项目是没有被识别。 打开java文件,可以看到没有识别,java的图标也没有出现。 解决方法 1、打开Project Structure 2、修改…

仿真APP助力汽车零部件厂商打造核心竞争力

汽车零部件是汽车工业的基石&#xff0c;是构成车辆的基础元素。一辆汽车通常由上万件零部件组成&#xff0c;包括发动机系统、传动系统、制动系统、电子控制系统等&#xff0c;它们共同确保了汽车的安全、可靠性及高效运行。 在汽车产业快速发展的今天&#xff0c;汽车零部件…

【Nginx】前端项目开启 Gzip 压缩大幅提高页面加载速度

背景 Gzip 是一种文件压缩算法&#xff0c;减少文件大小&#xff0c;节省带宽从而提减少网络传输时间&#xff0c;网站会更快更丝滑。 // nginx roothcss-ecs-1d22:/etc/nginx# nginx -v nginx version: nginx/1.24.0// node ndde v18.20.1// dependencies "vue": …

【Linux】从零开始使用多路转接IO --- epoll

当你偶尔发现语言变得无力时&#xff0c; 不妨安静下来&#xff0c; 让沉默替你发声。 --- 里则林 --- 从零开始认识多路转接 1 epoll的作用和定位2 epoll 的接口3 epoll工作原理4 实现epollserverV1 1 epoll的作用和定位 之前提过的多路转接方案select和poll 都有致命缺点…

CSS中常见的两列布局、三列布局、百分比和多行多列布局!

目录 一、两列布局 1、前言&#xff1a; 2. 两列布局的常见用法 两列布局的元素示例&#xff1a; 代码运行后如下&#xff1a; 二、三列布局 1.前言 2. 三列布局的常见用法 三列布局的元素示例&#xff1a; 代码运行后如下&#xff1a; 三、多行多列 1.前言 2&…

DCRNN解读(论文+代码)

一、引言 作者首先提出&#xff1a;空间结构是非欧几里得且有方向性的&#xff0c;未来的交通速度受下游交通影响大于上游交通。虽然卷积神经网络&#xff08;CNN&#xff09;在部分研究中用于建模空间相关性&#xff0c;但其主要适用于欧几里得空间&#xff08;例如二维图像&a…

StandardThreadExecutor源码解读与使用(tomcat的线程池实现类)

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java源码解读-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 目录 1.前言 2.线程池基础知识回顾 2.1.线程池的组成 2.2.工作流程 2…

Unreal5从入门到精通之如何解决在VR项目在头显中卡顿的问题

前言 以前我们使用Unity开发VR,Unity提供了非常便利的插件和工具来做VR。但是由于Unity的渲染效果不如Unreal,现在我们改用Unreal来做VR了,所有的VR相关的配置和操作都要重新学习。 今天就来总结一下,我在开发VR过程中碰到的所有问题。 1.编辑器,以VR运行 默认运行方式…

centos7 kafka高可用集群安装及测试

前言 用三台虚拟机centos7 搭建高可用集群&#xff0c;及测试方法 高可用搭建的方法&#xff0c;参考&#xff1a;https://blog.csdn.net/u011197085/article/details/134070318 高可用搭建 1、安装配置zookeeper集群 下载zookeeper 注&#xff1a;zookeeper链接如果失效&a…

Redis(2):内存模型

一、Redis内存统计 工欲善其事必先利其器&#xff0c;在说明Redis内存之前首先说明如何统计Redis使用内存的情况。 在客户端通过redis-cli连接服务器后&#xff08;后面如无特殊说明&#xff0c;客户端一律使用redis-cli&#xff09;&#xff0c;通过info命令可以查看内存使用情…

C++笔试题之实现一个定时器

一.定时器&#xff08;timer&#xff09;的需求 1.执行定时任务的时&#xff0c;主线程不阻塞&#xff0c;所以timer必须至少持有一个线程用于执行定时任务 2.考虑到timer线程资源的合理利用&#xff0c;一个timer需要能够管理多个定时任务&#xff0c;所以timer要支持增删任务…

0.STM32F1移植到F0的各种经验总结

1.结构体的声明需放在函数的最前面 源代码&#xff1a; /*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //开启USART1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructu…

在Microsoft Outlook日历中添加多个时区

在Microsoft Outlook日历中添加多个时区 1.单击Outlook中的文件选项卡&#xff0c;单击选项 2.左侧菜单中选择日历 3.向下滚动到时区部分&#xff0c;并标记当前时区&#xff0c;比如China 4.选中“显示第二个时区”框 5.选择第二个时区并给它一个标签&#xff0c;比如Germa…

为啥学习数据结构和算法

基础知识就像是一座大楼的地基&#xff0c;它决定了我们的技术高度。而要想快速做出点事情&#xff0c;前提条件一定是基础能力过硬&#xff0c;“内功”要到位。 想要通关大厂面试&#xff0c;千万别让数据结构和算法拖了后腿 我们学任何知识都是为了“用”的&#xff0c;是为…

爬虫学习4

from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(targetfunc,args("1"))t2 Thread(targetfunc, args("2"))t1.start()t2.start()print("我是诛仙剑")from …