饼状图每一块下面还有一个饼状图。这里用QT官方的例子做个笔记。
QT += charts
基本思路:
1、新建一个类DrilldownSlice继承自QPieSlice类,
实现3个方法:

 - updateLabel()//设置标题内容- showHighlight(bool show)//是否显示数值可见和突出显示- drilldownSeries()返回构造函数里存储的对象

2、新建一个类DrilldownChart继承自QChart类,
实现1个方法:

handleSliceClicked(QPieSlice *slice)//一个槽,连接到每一块的点击信号,每次点击就会把块的QPieSlice 对象往里传递,并把QPieSlice 对象强制转换为DrilldownSlice(因为DrilldownSlice也是继承QPieSlice);然后改变DrilldownChart里的数据内容;
changeSeries(QAbstractSeries *series)//把旧的QAbstractSeries 移除,把新的QAbstractSeries 赋值给当前QAbstractSeries ,并加到DrilldownChart中,更改名字。

3、新建1个QPieSeries对象,往里加N个DrilldownSlice对象,其中的一个参数为QPieSeries对象,而QPieSeries对象有包含有N个DrilldownSlice和N个QPieSeries对象。

4、把每一个QPieSeries对象的clicked信号连接到DrilldownChart的槽handleSliceClicked,这样就能实现每次点击都能到handleSliceClicked函数里边改变QChart的数据内容了。

drilldownchart.h文件

#ifndef DRILLDOWNCHART_H
#define DRILLDOWNCHART_H#include <QtCharts/QChart>QT_CHARTS_BEGIN_NAMESPACE
class QAbstractSeries;
class QPieSlice;
QT_CHARTS_END_NAMESPACEQT_CHARTS_USE_NAMESPACEclass DrilldownChart : public QChart
{Q_OBJECT
public:explicit DrilldownChart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);~DrilldownChart();void changeSeries(QAbstractSeries *series);public Q_SLOTS:void handleSliceClicked(QPieSlice *slice);private:QAbstractSeries *m_currentSeries;
};#endif // DRILLDOWNCHART_H

drilldownchart.c文件

#include "drilldownchart.h"
#include "drilldownslice.h"QT_CHARTS_USE_NAMESPACEDrilldownChart::DrilldownChart(QGraphicsItem *parent, Qt::WindowFlags wFlags): QChart(QChart::ChartTypeCartesian, parent, wFlags),m_currentSeries(0)
{}DrilldownChart::~DrilldownChart()
{}void DrilldownChart::changeSeries(QAbstractSeries *series)
{// NOTE: if the series is owned by the chart it will be deleted// here the "window" owns the series...if (m_currentSeries)removeSeries(m_currentSeries);m_currentSeries = series;addSeries(series);setTitle(series->name());
}void DrilldownChart::handleSliceClicked(QPieSlice *slice)
{DrilldownSlice *drilldownSlice = static_cast<DrilldownSlice *>(slice);changeSeries(drilldownSlice->drilldownSeries());
}#include "moc_drilldownchart.cpp"

drilldownslice.h文件

#ifndef DRILLDOWNSLICE_H
#define DRILLDOWNSLICE_H#include <QtCharts/QPieSlice>QT_CHARTS_BEGIN_NAMESPACE
class QAbstractSeries;
QT_CHARTS_END_NAMESPACEQT_CHARTS_USE_NAMESPACEclass DrilldownSlice : public QPieSlice
{Q_OBJECTpublic:DrilldownSlice(qreal value, QString prefix, QAbstractSeries *drilldownSeries);virtual ~DrilldownSlice();QAbstractSeries *drilldownSeries() const;public Q_SLOTS:void updateLabel();void showHighlight(bool show);private:QAbstractSeries *m_drilldownSeries;QString m_prefix;
};#endif // DRILLDOWNSLICE_H

drilldownslice.c文件

#include "drilldownslice.h"QT_CHARTS_USE_NAMESPACEDrilldownSlice::DrilldownSlice(qreal value, QString prefix, QAbstractSeries *drilldownSeries): m_drilldownSeries(drilldownSeries),m_prefix(prefix)
{setValue(value);updateLabel();setLabelFont(QFont("Arial", 8));connect(this, &DrilldownSlice::percentageChanged, this, &DrilldownSlice::updateLabel);connect(this, &DrilldownSlice::hovered, this, &DrilldownSlice::showHighlight);
}DrilldownSlice::~DrilldownSlice()
{}QAbstractSeries *DrilldownSlice::drilldownSeries() const
{return m_drilldownSeries;
}void DrilldownSlice::updateLabel()
{QString label = m_prefix;label += " $";label += QString::number(this->value());label += ", ";label += QString::number(this->percentage() * 100, 'f', 1);label += "%";setLabel(label);
}void DrilldownSlice::showHighlight(bool show)
{setLabelVisible(show);setExploded(show);
}#include "moc_drilldownslice.cpp"

main.cpp文件

#include "drilldownchart.h"
#include "drilldownslice.h"
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCore/QRandomGenerator>
#include <QtCharts/QChartView>
#include <QtCharts/QLegend>
#include <QtCharts/QPieSeries>QT_CHARTS_USE_NAMESPACEint main(int argc, char *argv[])
{QApplication a(argc, argv);QMainWindow window;DrilldownChart *chart = new DrilldownChart();chart->setTheme(QChart::ChartThemeLight);chart->setAnimationOptions(QChart::AllAnimations);chart->legend()->setVisible(true);chart->legend()->setAlignment(Qt::AlignRight);QPieSeries *yearSeries = new QPieSeries(&window);yearSeries->setName("Sales by year - All");const QStringList months = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};const QStringList names = {"Jane", "John", "Axel", "Mary", "Susan", "Bob"};for (const QString &name : names) {QPieSeries *series = new QPieSeries(&window);series->setName("Sales by month - " + name);for (const QString &month : months)*series << new DrilldownSlice(QRandomGenerator::global()->bounded(1000), month, yearSeries);QObject::connect(series, &QPieSeries::clicked, chart, &DrilldownChart::handleSliceClicked);*yearSeries << new DrilldownSlice(series->sum(), name, series);}QObject::connect(yearSeries, &QPieSeries::clicked, chart, &DrilldownChart::handleSliceClicked);chart->changeSeries(yearSeries);QChartView *chartView = new QChartView(chart);chartView->setRenderHint(QPainter::Antialiasing);window.setCentralWidget(chartView);window.resize(800, 500);window.show();return a.exec();
}

Drilldown饼状图相关推荐

  1. highcharts实现3D饼状图

    刚接触前端的时候作图大多数时候都用echarts,但今天项目中一个需求是要实现3D的饼状图,所以转向highcharts来实现,具体实现过程如下. 首先要引入所需的js文件,在官网详细说明该引入那些j ...

  2. 安卓饼状图设置软件_话单及银行卡交易智能分析软件

    一.产品概况: 思迈奥SMILE数据智能分析软件是由我司自主设计与研发的一款结合在公安和检察院的侦查业务经验而定制研发的数据智能分析系统,包含于话单.电子银行账单.及其它数据(个人出行数据.社会资源数 ...

  3. android饼状图简书,Charts-饼状图

    上篇文章已经讲述了折线图的用法这边文章主要来谈饼状图. 其实Charts难的部分主要在于配置,所以同样主要说说他的配置. pieGraphView.setExtraOffsets(left: 10, ...

  4. echart饼状图没有数据的时候显示暂无数据_Python数据结构可视化 day 5

    Python 数据结构可视化 (Day5) 01年度工作总结 有时候画布太大,影响到图表的展示,这个时候输入: "init_opts=opts.InitOpts(width='',heigh ...

  5. echart的关系图高亮_echart中饼状图的高亮显示。

    1 2 3 4 5 6 7 8 9 10 #main{ 11 width:50vw;height:60vh;margin-left:2vw 12 } 13 14 15 16 17 18 19 20 / ...

  6. C#应用NPOI实现导出EXcel表格中插入饼状图(可实现动态数据生成)

    一.思路:   1.excel是可以通过NPOI插入图片的: 2.C#通过NPOI生成饼状图: 3.把生成的饼状图以字节流的形式插入到表格 二.看代码: #region 生成饼图图例/// <s ...

  7. mysql 统计做饼状图_PHP+mysql+Highcharts实现饼状统计图

    Mysql 首先我们建一张・chart_pie・表作为统计数据. -- edit http://www.lai18.com -- 表的结构 `chart_pie` -- CREATE TABLE IF ...

  8. .net之生成图表的控件(柱状图,曲线图,饼状图) [转]

    可以生成柱状图,曲线图,饼状图,只要你给他一个datatable,在这声明一下 using System; using System.Web.UI; using System.Data; using  ...

  9. Iocomp控件教程之Pie Chart——饼状图控件

    Pie Chart--饼状图控件(Pie Chart)以饼状图形式显示每一个项目内容所占的百分比比重.在设计时.能够使用属性编辑器加入或者移除项目以及更改属性值.在执行时.使用AddItem,Remo ...

  10. js实现反恐精英+曲线图+饼状图

    js 画出几十种矢量图 raphaeljs 超炫丽的动画效果 js矢量图,你见过这么绚丽的效果吗? 1.旋转图片动画效果 ---- js 画图 raphaeljs  http://raphaeljs. ...

最新文章

  1. SAP MM Transportation of PR Release Strategy with Classification
  2. 那么多GAN哪个好?谷歌大脑泼来冷水:都和原版差不多
  3. php mysql 检索跳转_jQuery+AJAX+PHP+MySQL数据库开发搜索功能,无跳转无刷新搜索。...
  4. 那些开源程序中让人叹为观止的代码 - 3 保持元素纵横比
  5. 入门Leaflet之小Demo
  6. 洛谷 P3960 列队【线段树】
  7. pythonweb接口优化_记一次flask web接口速度优化
  8. 为什么JavaScript需要模块化开发?
  9. 大数据工作由哪几部分组成
  10. DPDK收发包全景分析
  11. 部署 3ds MAX 2022 插件开发环境(3ds MAX plug-in development)
  12. qt中实现多语言功能
  13. Python:1004 成绩排名
  14. (转)一个偷食禁果的女孩--一件我亲眼目睹的真实感人故事
  15. css基础-属性值计算过程
  16. css3 图片旋转360度动画
  17. ESXi8.0中NVME硬盘不识别解决方法1,设置直通
  18. 这篇 python 文章,是过去你错过的 python 细节知识点,滚雪球第4季第15篇
  19. 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”
  20. 交叉熵损失函数详解推导

热门文章

  1. div 设置a4大小_打印A4网页大小设置
  2. 注塑成型工艺中的背压到底有多重要?
  3. 在中兴新支点操作系统玩换装游戏
  4. tukey 窗口_HIFIDIY论坛-频响测量的SPL准确性与窗口对齐 - Powered by Discuz!
  5. face_landmarks
  6. linux关闭防火墙安装Vmware tools
  7. 动态IP和静态IP有什么区别?
  8. iphone屏幕镜像如何全屏_苹果投屏有什么方法?使用“屏幕镜像”功能,任意切换大小屏幕...
  9. 获取微信jssdk权限影响ajax,微信jssdk中请求得到access_token遇到跨域问题,改写为jsonp,报错...
  10. java excel 日期格式转换_Java处理Excel中的日期格式