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.xdnf.cn/news/1942.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

视频点播系统扩展示例

更多的前端页面&#xff08;如视频详情页、用户注册页等&#xff09;。更复杂的业务逻辑&#xff08;如视频评论、搜索功能等&#xff09;。安全性和权限管理&#xff08;如用户角色管理、权限控制等&#xff09;。其他技术细节&#xff08;如文件上传、分页查询等&#xff09;…

KVM虚拟机迁移:无缝迁徙,重塑云上未来

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

继续开始更新AI学习笔记——RAG技术

RAG技术&#xff1a; 1&#xff0c;读取文章&#xff0c;获得内容 2&#xff0c;分段成为chunks 3&#xff0c;向量化&#xff0c;形成向量数据库 4&#xff0c;用户问题&#xff0c;同样向量化 5&#xff0c;在向量库内部进行检索 6&#xff0c;检索获得有效文档&#x…

使用Netty实现一个简单的聊天服务器

✅作者简介&#xff1a;热爱Java后端开发的一名学习者&#xff0c;大家可以跟我一起讨论各种问题喔。 &#x1f34e;个人主页&#xff1a;Hhzzy99 &#x1f34a;个人信条&#xff1a;坚持就是胜利&#xff01; &#x1f49e;当前专栏&#xff1a;Netty &#x1f96d;本文内容&a…

链栈的基本操作实现

链栈的结构体定义 /*定义*/ typedef struct stacklnode{char data;struct stacklnode *next; }stacklnode,*linkstack; 初始化 /*初始化*/ void f1(linkstack *q){*qNULL; } 入栈 /*入栈*/ void f2(linkstack *q,char e ){linkstack p(linkstack)malloc(sizeof(stacklno…

c语言-常量和变量

文章目录 一、常量是什么&#xff1f;&#xff08;1&#xff09;整型常量&#xff1a;&#xff08;2&#xff09;实型常量&#xff1a;&#xff08;3&#xff09;字符常量&#xff1a;&#xff08;4&#xff09;字符串常量&#xff08;5&#xff09;地址常量 二、define 和 con…

UI设计软件全景:13款工具助力创意实现

选择恰当的UI设计工具对于创建美观且用户体验良好的应用程序界面至关重要。不同的APP功能可能需要不同的界面设计软件&#xff0c;但并非所有工具都需要精通&#xff0c;熟练掌握几个常用的就足够了。以下是13款APP界面设计软件&#xff0c;它们能够为你的团队提供绘制APP界面所…

mysql 8.0.39 Caused by: java.sql.SQLException: Illegal mix of collations 异常解决

java服务可以正常启动&#xff0c;页面发现查询报错Illegal mix of collations 报错信息&#xff1a; ### Cause: java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,COERCIBLE) and (utf8mb4_0900_ai_ci,COERCIBLE) for operation ; uncategorized SQ…

C++友元类的分文件编写

在学习C的关于友元类的知识时&#xff0c;网课例程中是在main函数文件中编写实现&#xff0c;但是我们知道&#xff0c;一般情况下&#xff0c;类以及类的成员函数实现都是在不同文件中实现的&#xff0c;因此&#xff0c;我们会自然的想到友元类是如何在不同文件下编写实现的&…

vue2与vue3生命周期差异整理

1、vue3 与 vue2 生命周期对比 生命周期整体分为四个阶段&#xff0c;分别是&#xff1a;创建、挂载、更新、销毁&#xff0c;每个阶段都有两个钩子&#xff0c;一前一后。 生命周期Vue 2Vue 3说明创建阶段beforeCreatesetup开始创建组件之前,实例被创建&#xff0c;还没有初…

c语言之在结构体里面定义函数指针

还是在看redis3.0源码的时候&#xff0c;遇到如下问题&#xff1a; 这个时候我们回到list这个结构体的设计上面 首先我们必须要注意的是函数名字就可以看成指针地址。 所以下面我们写一个简单的实例看一下具体的用法&#xff1a; #include <stdio.h> #include <stdl…

代码随想录一刷——1.两数之和

当我们需要查询一个元素是否出现过&#xff0c;或者一个元素是否在集合里的时候&#xff0c;就要第一时间想到哈希法。 C&#xff1a; unordered_map class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int…

EDA二维码生成工具 V1.2

EDA二维码生成工具用于在原理图、PCB环境中生成矢量二维码&#xff0c;具有生成速度快、生成效率高的特点&#xff0c;支持中文字符、英文字符生成。 此工具可直接输出在原理图、原理图库文档、PCB、PCB库文档中&#xff0c;可同时输出多种格式&#xff0c;可在Altium …

鸿蒙生态崛起带来的机遇与挑战

目录 1.概述 2.生态崛起 2.1.鸿蒙生态的认知和了解 2.2.鸿蒙生态的崛起分析 2.3.开发者的机遇 2.4.华为开发者大会 3.鸿蒙生态开发的挑战 3.1.开发工具 3.2.技术难度 3.3.生态竞争 3.4.抓住机遇、应对挑战 4.鸿蒙生态未来发展趋势 4.1.发展趋势 4.2.18N 4.3.开发…

JavaCV 图像边缘检测 之 Sobel算子 算法

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

二百七十四、Kettle——ClickHouse中对错误数据表中进行数据修复(实时)

一、目的 在完成数据清洗、错误数据之后&#xff0c;需要根据修复规则对错误数据进行修复 二、Hive中原有代码 insert into table hurys_db.dwd_queue partition(day) selecta3.id,a3.device_no,a3.source_device_type,a3.sn,a3.model,a3.create_time,a3.lane_no,a3.lane_…

第2章 Android App开发基础

第 2 章 Android App开发基础 bilibili学习地址 github代码地址 本章介绍基于Android系统的App开发常识&#xff0c;包括以下几个方面&#xff1a;App开发与其他软件开发有什么不一 样&#xff0c;App工程是怎样的组织结构又是怎样配置的&#xff0c;App开发的前后端分离设计…

ARM base instruction -- csetm

Conditional Set Mask sets all bits of the destination register to 1 if the condition is TRUE, and otherwise sets all bits to 0. 如果条件为TRUE&#xff0c;则条件设置掩码将目标寄存器的所有位设置为1&#xff0c;否则将所有位设为0。 32-bit variant Applies w…

rom定制系列------小米8青春版定制安卓14批量线刷固件 原生系统

&#x1f49d;&#x1f49d;&#x1f49d;小米8青春版。机型代码platina。官方最终版为 12.5.1安卓10的版本。客户需要安卓14的固件以便使用他们的软件。根据测试&#xff0c;原生pixeExpe固件适配兼容性较好。为方便客户批量进行刷写。修改固件为可fast批量刷写。整合底层分区…

java项目之校园资料分享平台(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园资料分享平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 校园资料分享平台的主要…