QT使用QChart绘制饼图

 更新时间:2024年11月19日 11:26:00   作者:姆路  
在Qt中使用QChart类可以快速绘制一个图表出来,比如折线图、饼图、柱状图等,本文就来为大家介绍一下如何利用QChart绘制简单的饼图吧

饼图没有坐标轴,也不需要坐标轴

使用的系列是QPieSeries

饼图里面一个一个的块称为切片

举例:

绘制一个饼图,点击对应切片可以让切片分离

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、创建饼图系列,并给系列添加切片,并设置切片的相关属性,并绑定饼图系列的信号

//创建系列,饼图没有坐标轴
QPieSeries * pie = new QPieSeries(this);
//添加切片
//参数1:对应的图例名和标签名(标签默认不显示)
//参数2:占据的数值
QPieSlice * ps1 = new QPieSlice("C语言", 40, this);
pie -> append(ps1);
QPieSlice * ps2 = new QPieSlice("C++", 30, this);
pie -> append(ps2);
 
//也可以直接在append中指定
pie -> append("JAVA", 25);
pie -> append("C#", 5);
 
//设置中间圆孔的大小,值不能超过1
pie -> setHoleSize(0.2);
 
//获取饼图的切片
//并设置切片的属性
auto p1 = pie -> slices().at(0);
 
//获取切片占的百分比,是一个小数
auto per = p1 -> percentage();
 
//设置切片的标签提示
p1 -> setLabel("c语言占" + QString::number(per * 100) + "%");
p1 -> setLabelVisible(true);
 
//p1->setPen()//设置画笔,改变轮廓
p1 -> setBrush(Qt::red); //改变填充
 
//点击信号,某个切片被点击了就会发出信号,信号参数告诉了是哪一个切片被点击了
connect(pie, & QPieSeries::clicked, this, [ = ](QPieSlice * p) {
    //将被点击的切片和饼图分离
    if (p -> isExploded()) {
        p -> setExploded(false);
    } else {
        p -> setExploded(true);
    }
 
});

4、将系列添加到图表中

//添加系列
chart->addSeries(pie);

完整代码:

#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);
        
        drawPiePic();
 
    }
    ~Widget()=default;
 
    //画饼图
    void drawPiePic()
    {
        //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();//显示或者隐藏图例(默认显示)
 
        //创建系列,饼图没有坐标轴
        QPieSeries* pie=new QPieSeries(this);
        //添加切片
        //参数1:对应的图例名和标签名(标签默认不显示)
        //参数2:占据的数值
        QPieSlice* ps1=new QPieSlice("C语言",40,this);
        pie->append(ps1);
        QPieSlice* ps2=new QPieSlice("C++",30,this);
        pie->append(ps2);
 
        //也可以直接在append中指定
        pie->append("JAVA",25);
        pie->append("C#",5);
 
        //设置中间圆孔的大小,值不能超过1
        pie->setHoleSize(0.2);
 
        //获取饼图的切片
        //并设置切片的属性
        auto p1=pie->slices().at(0);
 
        //获取切片占的百分比,是一个小数
        auto per=p1->percentage();
 
        //设置切片的标签提示
        p1->setLabel("c语言占"+QString::number(per*100)+"%");
        p1->setLabelVisible(true);
 
        //p1->setPen()//设置画笔,改变轮廓
        p1->setBrush(Qt::red);//改变填充
 
        //点击信号,某个切片被点击了就会发出信号,信号参数告诉了是哪一个切片被点击了
        connect(pie,&QPieSeries::clicked,this,[=](QPieSlice* p){
            //将被点击的切片和饼图分离
            if(p->isExploded())
            {
                p->setExploded(false);
            }
            else
            {
                p->setExploded(true);
            }
 
        });
 
        //添加系列
        chart->addSeries(pie);
 
    }
 
 
};
#endif // WIDGET_H

到此这篇关于QT使用QChart绘制饼图的文章就介绍到这了,更多相关QT QChart绘制饼图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++中范围(Ranges)与视图(Views)的常见问题、易错点

    C++中范围(Ranges)与视图(Views)的常见问题、易错点

    ranges和views是C20引入的重要特性,它们让代码更加简洁、高效且富有表达力,通过理解其基本概念、注意常见的陷阱,并合理应用高级技巧,开发者可以充分利用这些新特性,提升软件质量和开发效率,,本文将深入浅出地探讨ranges与views的基础概念、常见问题、易错点及避免策略
    2024-06-06
  • 五个嵌入式C语言中的实用技巧分享

    五个嵌入式C语言中的实用技巧分享

    这篇文章主要和大家分享一下五个嵌入式C语言中的实用技巧,文中的示例代码讲解详细,对我们学习C语言有一定的帮助,需要的可以参考一下
    2022-12-12
  • C++实现洗牌发牌排序功能的示例代码

    C++实现洗牌发牌排序功能的示例代码

    本篇文章主要介绍了C++实现洗牌发牌排序功能的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • C++string字符串拼接遇到的问题及解决

    C++string字符串拼接遇到的问题及解决

    这篇文章主要介绍了C++string字符串拼接遇到的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • C语言超细致讲解循环语句

    C语言超细致讲解循环语句

    我们说到当满足特定条件时,就会执行if语句或者switch语句后面的语句,否则不执行,但是这只能执行一次,在日常生活中,有些事情是需要重复去做的,C语句就为此引入了循环语句。所以今天继续为大家分享C语言循环家族
    2022-05-05
  • C++浅析虚函数使用方法

    C++浅析虚函数使用方法

    对C++了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。本文就将详细讲讲虚函数表的原理与使用,需要的可以参考一下
    2022-08-08
  • 一篇文章带你了解C语言的选择结构

    一篇文章带你了解C语言的选择结构

    这篇文章主要为大家介绍了C语言的选择结构,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C语言深入讲解函数参数的使用

    C语言深入讲解函数参数的使用

    函数的参数分为形参和实参两种。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用
    2022-04-04
  • exit和atexit的区别详细解析

    exit和atexit的区别详细解析

    以下是对exit与atexit的区别进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • C语言中关于树和二叉树的相关概念

    C语言中关于树和二叉树的相关概念

    这篇文章主要介绍了Java 数据结构之树和二叉树相关资料,文中通过示例代码和一些相关题目来做介绍,非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02

最新评论