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
相关推荐
Yeauty37 分钟前
渲染成图再 CLI 拼接,还是进程内直推?Rust 帧到视频的两条路
开发语言·rust·音视频
geovindu1 小时前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
库克克2 小时前
【C++】set 与multiset
开发语言·c++
Wang's Blog2 小时前
Go-Zero项目开发34: 微服务超时控制与重试机制实践
开发语言·微服务·golang·go-zero
2zcode3 小时前
项目文档:基于MATLAB神经网络的心力衰竭预测与临床辅助决策系统研究
开发语言·神经网络·matlab·心力衰竭预测\
减瓦3 小时前
深入 Quarkus:云原生时代 Java 的重生之路
java·开发语言·云原生
杨运交3 小时前
[053][核心模块]Java枚举缓存与ORM集成实践
java·开发语言·缓存
2401_894915534 小时前
Geo优化系统源码部署搭建技术——PHP程序开发部署指南
开发语言·php
茯苓gao4 小时前
嵌入式开发笔记:QSerialPort 完整使用指南——从基础 API 到工程实战
笔记·嵌入式硬件·qt·学习
wuyk5554 小时前
67.嵌入式C语言进阶:结构体指针实战指南——STM32外设、传感器数据访问的高效技巧
c语言·开发语言·stm32·单片机