绘制条形(柱状)图,系列选择条形系列QBarSeries
x轴选择条形图的种类轴QBarCategoryAxis
1、创建图表视图
cpp
//1、创建图表视图
QChartView * view = new QChartView(this);
//开启抗锯齿
view -> setRenderHint(QPainter::Antialiasing);
2、创建图表,并将图表设置给视图,设置图表的一些属性
cpp
//2.创建图表
QChart * chart = new QChart();
//3.将图表设置给视图
view -> setChart(chart);
//设置标题
chart -> setTitle("条形图");
chart -> legend() -> show(); //显示或者隐藏图例(默认显示)
3、创建X轴(使用条形图的种类轴QBarCategoryAxis)和Y轴,并添加到图表中
cpp
//构建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,设置其相关属性,
并添加条形集合,在条形集合中追加每一个种类对应的值
可以添加多个条形集合,若有多个,则每一个种类对应的条形就有多个
并设置条形集合的一些属性
cpp
//创建条形系列
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轴进行关联
cpp
//添加系列
chart -> addSeries(bar);
//将轴附加到系列
bar -> attachAxis(axisX);
bar -> attachAxis(axisY);
完整代码
cpp
#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_OBJECT
public:
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: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();
//添加系列
chart->addSeries(bar);
//将轴附加到系列
bar->attachAxis(axisX);
bar->attachAxis(axisY);
}
};
#endif // WIDGET_H