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
相关推荐
niucloud-admin6 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
滕州市燕猫虎计算机科技工作室个体工商户6 小时前
Java锁
java·开发语言
多加点辣也没关系7 小时前
JavaScript|第31章:表单与控件
开发语言·javascript·ecmascript
菜鸟~noob2337 小时前
【电子战】 第09篇:阵列信号处理——波束形成、MVDR、MUSIC【含matlab代码】
开发语言·matlab·信号处理
ocean21037 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
零依赖极客7 小时前
Day 6·1 ARMv8.2 dotprod——vdotq_s32 一条指令做 4 个点积
c语言·开发语言·人工智能·矩阵·arm·vllm
新时代牛马9 小时前
cyclictest 毛刺从哪来?从ftrace、latencytop、perf到IRQ/调度延迟定位
android·开发语言·python·kotlin
三8449 小时前
Java 模板注入(FreeMarker) · 02 · 模板引擎与 FreeMarker 语法
java·开发语言·web安全·freemarker
IvanCodes10 小时前
Python 基础语法(七):推导式与常见遍历写法
开发语言·python
暮雨哀尘10 小时前
Java 基础练习(一):创建类并调用对象
java·开发语言