QtCharts 饼图的基本用法

目录

相关阅读

简述

构建饼图所需的对象

饼图示例

运行结果

更改图例标签

运行 


相关阅读

QtCharts 关于饼图标签重叠的问题_series[i] ({type: 'pie', ...}) | charts文字重叠-优快云博客

Qt编程:使用QBarSeries创建柱状图与多彩图表示例,-优快云博客

QtCharts 折线图与曲线图_qt图形视图框架绘制折线 曲线-优快云博客

QtCharts 面积图-优快云博客


1. 简述

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

2. 构建饼图所需的对象

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

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

介绍QPieSeries与QPieSlice:

  • QPieSeries是 Qt Charts 模块中的一个类,主要用于创建和管理饼图(Pie Chart)。
  • QPieSeries 作为一个容器,用于存储和管理多个 QPieSlice 对象,这些 QPieSlice 对象构成了一个完整的饼图。例如,在展示不同产品的市场份额时,每个 QPieSlice 可以代表一种产品的份额,而 QPieSeries 将这些份额组合成一个饼图。
  • QPieSlice是 QPieSeries 中的一个重要元素,代表饼图中的一个切片。

3. 饼图示例

在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());
}

4. 运行结果

5. 更改图例标签

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

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

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

6. 再次运行 

        

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Quz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值