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

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

绘制条形(柱状)图,系列选择条形系列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_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


http://www.kler.cn/a/399890.html

相关文章:

  • 爬取链家二手房房价数据存入mongodb并进行分析
  • 【Ubuntu24.04】使用服务器
  • 大数据如何助力干部选拔的公正性
  • [241115] Debian 12.8 发布 | Mistral AI 推出批量 API,成本降低 50%
  • 删除缓存之后,浏览器显示登录新设备
  • Bugku CTF_Web——No one knows regex better than me
  • 推荐一套相片复原工具:Focus Magic
  • hive3.1.2编译spark3安装包
  • 第六届智能控制、测量与信号处理国际学术会议 (ICMSP 2024)
  • React Native 全栈开发实战班 - 用户界面进阶之响应式设计实践
  • 数据结构-实验四(栈与字符串)
  • SpringMVC域对象共享数据
  • 新版自助笔记-工作记录-2024-11-18
  • 云安全之云计算基础
  • 【Linux】实现一个简易的进程池
  • 中国省级金融发展水平指数(金融机构存款余额、贷款余额、GDP)2020-2023年
  • 整理:4篇专注于多模态大语言模型(MLLM)的瘦身变体论文
  • 一文说清:c++标准库
  • 电脑msvcr100.dll丢失的解决方法,详细介绍多个解决方法
  • 上市公司企业研发操纵数据集(2008-2023年)
  • 【鸿蒙开发】第十五章 H5与端侧交互、Cookies以及Web调试
  • Video Duplicate Finder 快速识别并去除重复的视频和图像!
  • 大数据算法:三、梯度下降
  • Linux 中怎样把正在执行的任务放到后台执行
  • vue3 路由写法及传参方式 !超详细
  • 开源物业管理系统助力智能社区提升服务效率与用户体验