QtCharts 饼图的基本用法

 简述

        Qt饼图由定义为QPieSlice对象的扇形切片组成。本文主要是介绍如何使用饼图展现统计数据。

构建饼图所需的对象

        从外层到内依次需要:QChartView、QChart、QPieSeries、QPieSlice。

  • QChartView:提供一个独立的界面用来展示Charts,不需要额外的绘画场景。
  •  QChart:管理图表系列、图例和坐标轴等。可以设置整体的主题、动画属性、统计图形的增删、缩放、标题等。
  • QPieSeries:由定义为QPieSlice对象的切片组成。可以设置圆孔的大小、设置所有标签的位置(扇形内部、外部等,并不能指定坐标)、起始角度、结束角度、饼图位置(上、下、左、右、居中)等。
  • QPieSlice:具体的某一扇形切片。可以设置扇形的外观、标签、数据、起始角度、可分离等属性。

饼图示例

        在pro中加入charts模块后,头文件如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtCharts>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void initChart();

private slots:
    //点击
    void onPieSeriesClicked(QPieSlice*);

private:
    Ui::MainWindow *ui;

    //饼状图
    QPieSeries *pie_series;
};

#endif // MAINWINDOW_H

        cpp文件如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QVBoxLayout>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    initChart();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::initChart()
{
    //饼状图
   pie_series = new QPieSeries(this);
   connect(pie_series, SIGNAL(clicked(QPieSlice*)), this, SLOT(onPieSeriesClicked(QPieSlice*)));

   //定义各扇形切片的颜色
   static const QStringList list_pie_color = {
       "#6480D6","#A1DC85","#FFAD25","#FF7777","#84D1EF","#4CB383",
   };

   //设置数据
   QList<qreal> list_data = {3.1, 3.2, 3.3, 3.4, 3.5, 3.6};

   //扇形
   for (int i = 0; i < list_pie_color.size(); i++) {
       QPieSlice* pie_slice = new QPieSlice(this);
       pie_slice->setLabelVisible(true);
       pie_slice->setValue(list_data[i]);
       pie_slice->setLabel(QString::number(list_data[i]));
       pie_slice->setColor(list_pie_color[i]);
       pie_slice->setLabelColor(list_pie_color[i]);
       pie_slice->setBorderColor(list_pie_color[i]);
       pie_series->append(pie_slice);
   }

   //图表视图
   QChart* chart = new QChart;
   chart->setTitle("XXX统计饼图");
   //设置暗黑主题
   chart->setTheme(QChart::ChartThemeDark);

   //标题字体
   QFont font = qApp->font();
   font.setBold(true);
   font.setPointSize(16);
   chart->setTitleFont(font);

   //加入饼图
   chart->addSeries(pie_series);
   chart->setAnimationOptions(QChart::SeriesAnimations);

   //图例
   chart->legend()->setAlignment(Qt::AlignBottom);
   chart->legend()->setBackgroundVisible(false);

   //加入绘画视图
   QChartView* chartView = new QChartView(this);
   chartView->setRenderHint(QPainter::Antialiasing);
   chartView->setChart(chart);

   //加入布局
   QVBoxLayout* layout = new QVBoxLayout;
   layout->setContentsMargins(0, 0, 0, 0);
   layout->addWidget(chartView);
   ui->centralwidget->setLayout(layout);
}

//点击饼图
void MainWindow::onPieSeriesClicked(QPieSlice* slice)
{
    slice->setExploded(!slice->isExploded());
}

运行结果

更改图例标签

        图例标签显示的文本是扇形切片所设置的。如果要将图例标签改为其它的文本,应该怎么做呢?

        在图例设置下加入以下代码,可以使得饼图在设置数据、标签的时候,不会让图例的标签发生变化。

    for (int i = 0; i < list_pie_color.size(); i++) {
        chart->legend()->markers(pie_series)[i]->setLabel("统计项" + QString::number(i+1));
    }

编译运行 

        

  • 9
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值