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

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.mrgr.cn/news/62080.html

相关文章:

  • 基于Python的自然语言处理系列(42):Token Classification(标注分类)
  • 爬虫设计思路
  • 【问题记录】解决VMware虚拟机中鼠标侧键无法使用的问题
  • [Vue warn]: Do not use built-in or reserved HTML elements as component id:
  • 【牛客算法】某司面试算法题:设计LRU缓存结构
  • 【面试】rabbitmq的主要组件有哪些?
  • 【力扣打卡系列】反转链表
  • python 模块和包、类和对象
  • VBA语言専攻介绍20241031
  • android 12 禁止三方APP 使用API 直接打开wifi的修改方法
  • IDEA 社区版 lombok插件报错(java:方法引用无效)
  • MongoDB 部署指南:从 Linux 到 Docker 的全面讲解
  • 算法|牛客网华为机试11-20C++
  • 树莓派4处理器超频指南
  • 两步GMM计算权重矩阵
  • matlab读取逐日的1km分辨率中国大陆地区的土壤水数据,并汇总至逐月分辨率
  • 数字化平台助力:国际数字影像产业园打造智慧园区生态圈
  • (也许是全网首发!)Qt6 编译著名Widgets组件 Qt Material Widgets by MSVC / Mingw
  • 设计产品宣传册没参考?推荐一个超多产品宣传册案例的网站
  • OpenJudge:找和为K的两个元素
  • 接口自动化测试平台项目环境搭建
  • MySQL-SQL性能分析
  • 【Stable Diffusion - Ai】小白入门必看(涂鸦、涂鸦重绘、局部重绘和重绘蒙版篇)!真材实料!不卖课!!!
  • 跨平台实现实时通讯
  • 【iOS】SDWebImage
  • 海外联盟营销入门:2024最新指南