Qt之饼图(Pie Graph)

@[TOC](Qt之饼图(Pie Graph))

饼图名为Pie Graph,用于显示一个数据系列中各项的大小与各项总和的比例。本文基于QtCharts实现饼图的显示。

1.实现过程

1.1环境配置

(1)首先想要使用QtCharts模块,需要在安装qt时选择勾选安装QtCharts;

(2)构建QtWidgets项目,在xx.pro项目文件中添加 Qt += charts;

(3)在头文件中添加如下代码:

cpp 复制代码
#include <QtCharts/QChart>
#include <QtCharts/QPieSeries>
#include <QtCharts/QPieSlice>
QT_CHARTS_USE_NAMESPACE

(4)在xx.ui资源文件中,添加一个QWidget窗口控件并提升为QChartView类。

饼图显示

cpp 复制代码
QChart *chart = new QChart();
    chart->setAnimationOptions(QChart::SeriesAnimations);
    ui->widget_bar->setChart(chart);
    ui->widget_bar->setRenderHint(QPainter::Antialiasing);
    chart = ui->widget_bar->chart();						//获取chart对象
    chart->removeAllSeries();							//删除所有序列
    ui->widget_bar->chart()->setTitle("");
    //series->setHoleSize(ui->spinHoleSize->value()); //饼图中间空心的大小
    m_series = new QPieSeries(); //创建饼图序列
    m_series->clear();
    QStringList list;
    list<<"完成度"<<"符合度"<<"应用情况";
    for (int i = 0; i < 3; i++) //添加分块数据
    {
        int data = 0;
        if(i == 0)
            data = 45;
        else if(i == 1)
            data = 30;
        else
            data = 25;
        m_series->append(list[i], data);
    }

    m_series->setLabelsVisible(true);					//只影响当前的slices,必须添加完slice之后再设置
    ui->widget_bar->chart()->addSeries(m_series);						    //添加饼图序列

                                                        //饼图分块
    QPieSlice *slice;
    for (int i = 0; i < 3; i++)
    {
        slice = m_series->slices().at(i);
        slice->setLabel(slice->label() + QString::asprintf(": %.0f, %.1f%%",         //设置分块的标签
            slice->value(), slice->percentage() * 100));

        connect(slice, SIGNAL(hovered(bool)), this, SLOT(on_PieSliceHighlight(bool)));//信号与槽函数关联,鼠标落在某个分块上时,此分块弹出
    }
    ui->widget_bar->chart()->legend()->setVisible(true);			        //图例
    ui->widget_bar->chart()->legend()->setAlignment(Qt::AlignRight);      //Qt::AlignRight
相关推荐
努力也学不会java2 分钟前
【网络原理】 网络编程套接字
java·开发语言·网络·网络协议·tcp/ip·php
鑫—萍6 分钟前
C++——入门基础
c语言·开发语言·c++·学习·算法
溟洵10 分钟前
【C++ Qt】快速上手 显⽰类控件(Label、LCDNumber、ProcessBar、CalendarWidget)
开发语言·c++·qt
HvrI129 分钟前
【Harmony_Bug】forEach + asyncawait 的异步陷阱
开发语言·华为·bug·harmonyos·鸿蒙
说码解字1 小时前
C++ RAII
开发语言·c++
喵先生!1 小时前
C++中析构函数
开发语言·c++
qq_447663052 小时前
手写SpringMVC(基本框架)
java·开发语言
程序员JerrySUN7 小时前
驱动开发硬核特训 · Day 22(下篇): # 深入理解 Power-domain 框架:概念、功能与完整代码剖析
linux·开发语言·驱动开发·嵌入式硬件
游离状态的猫18 小时前
JavaScript性能优化实战:从瓶颈定位到极致提速
开发语言·javascript·性能优化
GeekABC8 小时前
FastAPI系列06:FastAPI响应(Response)
开发语言·python·fastapi·web