QT中使用图表之QChart绘制柱状图

devtools/2024/11/19 9:10:19/

绘制条形(柱状)图,系列选择条形系列QBarSeries

x轴选择条形图的种类轴QBarCategoryAxis

1、创建图表视图

//1、创建图表视图
QChartView * view = new QChartView(this);
//开启抗锯齿
view -> setRenderHint(QPainter::Antialiasing);

2、创建图表,并将图表设置给视图,设置图表的一些属性

//2.创建图表
QChart * chart = new QChart();//3.将图表设置给视图
view -> setChart(chart);//设置标题
chart -> setTitle("条形图");
chart -> legend() -> show(); //显示或者隐藏图例(默认显示)

3、创建X轴(使用条形图的种类轴QBarCategoryAxis)和Y轴,并添加到图表中

//构建x轴,条形图使用种类轴
QBarCategoryAxis * axisX = new QBarCategoryAxis(this);
axisX -> append({"2020","2021","2022"
}); //添加x轴上的种类刻度//构建y轴,使用数值轴
QValueAxis * axisY = new QValueAxis(this);
axisY -> setRange(0, 200);chart -> addAxis(axisX, Qt::AlignBottom);
chart -> addAxis(axisY, Qt::AlignLeft);

4、创建条形系列QBarSeries,设置其相关属性,

      并添加条形集合,在条形集合中追加每一个种类对应的值

      可以添加多个条形集合,若有多个,则每一个种类对应的条形就有多个

      并设置条形集合的一些属性

//创建条形系列
QBarSeries * bar = new QBarSeries(this);
bar -> setLabelsVisible(true); //设置标签可见
bar -> setLabelsFormat("@value%"); //改变每一个条形里面的标签,@value表示每一个条形的y值
//bar->setBarWidth(0.1);//设置条形的宽度  取值是一个系数,小于0变窄 大于0变宽//每一个数据集可以有多个数据
QBarSet * bs1 = new QBarSet("C语言"); //参数为图例
bs1 -> append(20); //对应x:2020
bs1 -> append(30); //对应x:2021
bs1 -> append(40); //对应x:2022
//给条形图添加数据集
bar -> append(bs1);//添加第二组数据集,则同一个x处有两个条形
QBarSet * bs2 = new QBarSet("C++"); //图例
bs2 -> append(120);
bs2 -> append(130);
bs2 -> append(140);
bar -> append(bs2);//设置条形图的样式 QBarSet的方法
bs2 -> setBrush(Qt::red); //设置条形的填充
bs2 -> setLabelColor(Qt::black); //设置标签的颜色
bs2 -> setBorderColor((Qt::green)); //设置条形的边框颜色
bs2 -> setLabel("你好"); //设置图例的内容
//bs2->setPen();

5、将条形系列QBarSeries添加到图表中,并和XY轴进行关联

//添加系列
chart -> addSeries(bar);
//将轴附加到系列
bar -> attachAxis(axisX);
bar -> attachAxis(axisY);

 完整代码

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QtCharts>
#include<QHBoxLayout>
#include<QPieSlice>
#include<QPieSeries>
#include<QBarSeries>
#include<QBarSet>
#include<QAreaSeries>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr) : QWidget(parent){resize(800,600);QHBoxLayout* h_box=new QHBoxLayout(this);drawBarPic();}~Widget()=default;//画条形图(柱状图)void drawBarPic(){//1、创建图表视图QChartView* view=new QChartView(this);//开启抗锯齿view->setRenderHint(QPainter::Antialiasing);this->layout()->addWidget(view);//2.创建图表QChart* chart=new QChart();//3.将图表设置给视图view->setChart(chart);//设置标题chart->setTitle("条形图");chart->legend()->show();//显示或者隐藏图例(默认显示)//构建x轴,条形图使用种类轴QBarCategoryAxis* axisX=new QBarCategoryAxis(this);axisX->append({"2020","2021","2022"});//添加x轴上的种类刻度//构建y轴,使用数值轴QValueAxis* axisY=new QValueAxis(this);axisY->setRange(0,200);chart->addAxis(axisX,Qt::AlignBottom);chart->addAxis(axisY,Qt::AlignLeft);//创建条形系列QBarSeries* bar=new QBarSeries(this);bar->setLabelsVisible(true);//设置标签可见bar->setLabelsFormat("@value%");//改变每一个条形里面的标签//bar->setBarWidth(0.1);//设置条形的宽度  取值是一个系数,小于0变窄 大于0变宽//每一个数据集可以有多个数据QBarSet* bs1=new QBarSet("C语言");//参数为图例bs1->append(20);//对应x:2020bs1->append(30);//对应x:2021bs1->append(40);//对应x:2022//给条形图添加数据集bar->append(bs1);//添加第二组数据集,则同一个x处有两个条形QBarSet* bs2=new QBarSet("C++");//图例bs2->append(120);bs2->append(130);bs2->append(140);bar->append(bs2);//设置条形图的样式 QBarSet的方法bs2->setBrush(Qt::red);//设置条形的填充bs2->setLabelColor(Qt::black);//设置标签的颜色bs2->setBorderColor((Qt::green));//设置条形的边框颜色bs2->setLabel("你好");//设置图例的内容//bs2->setPen();//添加系列chart->addSeries(bar);//将轴附加到系列bar->attachAxis(axisX);bar->attachAxis(axisY);}};
#endif // WIDGET_H


http://www.ppmy.cn/devtools/135170.html

相关文章

vue自定义指令--一键复制

vue项目中想要实现点击按钮一键复制&#xff0c;可以通过vue的自定义指令directive来实现。 一、新建directive.js文件 新建directive.js文件&#xff0c;用于定义所有的自定义指令。 import { Toast } from vant;const directive {// 一键复制copy:{bind (el, { value }) …

日志采样标记算法

从日志中提取特征值: {0: (LDAP Built with OpenLDAP LDAP SDK, :), 1: (LDAP SSL support unavailable, :), 2: (suEXEC mechanism enabled lili wrapper /usr/sbin/suexec, ()/:), 3: (Digest generating secret for digest authentication ..., .:), 4: (Digest done…

第十一章 对Stream流的聚合函数处理

目录 一、对流中数据进行聚合计算 二、对流中数据进行分组 三、对流中数据进行多级分组 四、对流中数据进行分区 4.1. 使用方式及代码 4.2. 分区于分组的区别 分区&#xff08;Partitioning&#xff09; 分组&#xff08;Grouping&#xff09; 实际应用场景 五、对流…

20-大模型外挂知识库优化——负样本样本挖掘篇

大模型外挂知识库优化——负样本样本挖掘篇 一、为什么需要构建负难样本&#xff1f; 在各类检索任务中&#xff0c;为训练好一个高质量的检索模型&#xff0c;往往需要从大量的候选样本集合中采样高质量的负例&#xff0c;配合正例一起进行训练。 二、负难样本构建方法篇 …

WIFI-TTL透传模块说明书

WIFI-TTL透传模块说明书 V 1.0 2022-11-24 目录 1 简介... 4 2 模块参数... 4 3 接口定义... 5 4 设备配网... 6 5 AT指令... 11 6 恢复出厂... 12 7 设备配置... 13 7.1 配置界面说明... 13 7.2 TTL串口配置... 13 7.3 …

【Patroni官方文档】FAQ

FAQ&#xff08;常见问题解答&#xff09; 在本节中&#xff0c;您将找到关于Patroni的最常见问题的答案。每个小节都试图关注不同类型的问题。 我们希望这能帮助您澄清大部分问题。如果您仍然有进一步的疑虑或遇到意外问题&#xff0c;请参考“聊天和报告错误”部分&#xf…

交易术语汇总(Technical Trading Dictionary)

Arbitrage (套利) --- 一种利用交易所之间的差价获利的方法。 Accumulation (累积) --- 在一种资产中建立头寸的过程。 Ask/Bid (询价/竞价) --- 卖出订单是询价(Ask)&#xff0c;买入订单是出价(Bid)。 ATH&#xff08;历史最高价) --- All-time high 全时高。 Bearish MS…

c++20模块示例

模块接口声明&#xff0c;MyModule.cppm&#xff1a; export module MyModule; export namespace MyNamespace {void printHello(); }模块实现&#xff0c;MyModuleImpl.cpp&#xff1a; module;#include <iostream>module MyModule; namespace MyNamespace {void prin…