QT draws a pie chart QPieSeries

Related links:
QT draws a histogram BarChart
QT draws a line chart LineChart
QT draws a curve graph SplineChart
QT draws a scatter chart ScatterChart
QT draws an area chart AreaChart

0. Create ui window:

Mainly drag oneHorizontal Layout
Insert picture description here
Insert picture description here

1. Create a Qchart object:

QChart *chart = new QChart();
chart->setTitle("饼状图演示图"); //设置表格标题

2. Create a QPieSeries object:

QPieSeries *series = new QPieSeries(chart);
series->append("A产品",3143); //添加饼状图的各个部分(名称,数量)
series->append("B产品",2542);
series->append("C产品",3812);
//饼状图的缩放因子
series->setPieSize(0.6);
//是否要饼状图变成空心(即环形)
series->setHoleSize(0.25);//饼图中间空心的比例

The effect picture after adding:
Insert picture description here

3. Create QPieSeries objects

QPieSlice *slice_1 =series->slices().at(0);//创建对应扇区对象
QPieSlice *slice_2 =series->slices().at(1);
QPieSlice *slice_3 =series->slices().at(2);
slice_1->setColor(QColor(255,0,0));//设置颜色
slice_2->setColor(QColor(0,255,0));
slice_3->setColor(QColor(0,0,255));
// 是否显示指标文字
slice_1->setLabelVisible(false);
slice_2->setLabelVisible(false);
slice_3->setLabelVisible(false);

final effect:
Insert picture description here

slice_1->setLabelVisible(true);
slice_2->setLabelVisible(true);
slice_3->setLabelVisible(true);

final effect:
Insert picture description here

slice_1->setExploded(true);//扇面间区分
slice_1->setExplodeDistanceFactor(0.1);// 扇面分开的距离指数,数值越大区分程度越大
slice_2->setExploded(true);
slice_2->setExplodeDistanceFactor(0.1);
slice_3->setExploded(true);
slice_3->setExplodeDistanceFactor(0.1);

final effect:
Insert picture description here

4. Add QPieSeries to QChart

chart->addSeries(series);

5. Chart comprehensive effect settings:

//设置动画效果
chart->setAnimationOptions(QChart::AllAnimations);
// 设置竖向图例 
chart->legend()->setAlignment(Qt::AlignRight);
// 隐藏图例
//chart->legend()->hide();
//设置图表主题(会修改到扇区的颜色)
// 可选: QChart::ChartThemeLight
// QChart::ChartThemeBlueCerulean
// QChart::ChartThemeDark
// QChart::ChartThemeBrownSand
// QChart::ChartThemeBlueNcs
// QChart::ChartThemeHighContrast
// QChart::ChartThemeBlueIcy
// QChart::ChartThemeQt
chart->setTheme(QChart::ChartThemeBlueIcy);

6. Display chart:

QChartView *chartView;
chartView = new QChartView(chart);
ui->verticalLayout->insertWidget(0,chartView);

The overall code presentation:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtCharts>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

QT_CHARTS_BEGIN_NAMESPACE
class QChartView;
class QChart;
QT_CHARTS_END_NAMESPACE

QT_CHARTS_USE_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    QChart * createPieChart() const; // 绘制自定义的饼状图

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

	// 创建QChartView 对象
	QChartView *chartView;
	// QChartView 对象载入饼状图
	chartView = new QChartView(createPieChart());
	// 显示图标
	ui->verticalLayout->insertWidget(0,chartView);

}

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

// 绘制饼状图
QChart *MainWindow::createPieChart() const
{
    QChart *chart = new QChart();
    chart->setTitle("饼状图演示图");

    QPieSeries *series = new QPieSeries(chart);
    series->setName("hello");
    series->append("A产品",3143);
    series->append("B产品",2542);
    series->append("C产品",3812);
    series->setLabelsVisible();
    //饼图的大小
    series->setPieSize(0.6);


    QPieSlice *slice_1 =series->slices().at(0);
    QPieSlice *slice_2 =series->slices().at(1);
    QPieSlice *slice_3 =series->slices().at(2);

    slice_1->setLabelVisible();// 是否显示指标文字
    slice_1->setExploded();//扇面区分
    slice_1->setExplodeDistanceFactor(0.1);// 扇面分开的距离指数
    slice_2->setLabelVisible();
    slice_2->setExploded();
    slice_2->setExplodeDistanceFactor(0.1);
    slice_3->setLabelVisible();
    slice_3->setExploded();
    slice_3->setExplodeDistanceFactor(0.1);
    
    chart->setAnimationOptions(QChart::AllAnimations);//设置动画效果
    chart->legend()->setAlignment(Qt::AlignRight);//竖向图例

    chart->addSeries(series);
    chart->setTheme(QChart::ChartThemeBlueIcy); //选择主题
    return chart;
}

Insert picture description here

Guess you like

Origin blog.csdn.net/sazass/article/details/112863491