一杯清酒邀明月
天下本无事,庸人扰之而烦耳。

0.创建ui窗口:

主要就是拖拉一个Horizontal Layout
在这里插入图片描述
在这里插入图片描述

1.创建QChart对象:

1 QChart *chart = new QChart();
2 chart->setTitle("面积图演示"); //设置表格标题

2.创建QLineSeries对象:

 1 QLineSeries *series1 = new QLineSeries(chart);
 2 series1->setName("A店铺接单数");
 3 // 添加节点
 4 series1->append(0,8);
 5 series1->append(1,10);
 6 series1->append(2,12);
 7 series1->append(3,17);
 8 series1->append(4,19);
 9 series1->append(5,18);
10 series1->append(6,20);
11 
12 QLineSeries *series2 = new QLineSeries(chart);
13 series2->setName("B店铺接单数");
14 series2->append(0,1);
15 series2->append(1,4);
16 series2->append(2,5);
17 series2->append(3,3);
18 series2->append(4,11);
19 series2->append(5,16);
20 series2->append(6,19);

3.创建QAreaSeries对象:

1 //(区域上限,区域下限)
2 QAreaSeries *area1 = new QAreaSeries(series1, 0);
3 QAreaSeries *area2 = new QAreaSeries(series2, series1);
4 area1->setName("A区域");
5 area2->setName("B区域");

4.将QAreaSeries添加到QChart

1 chart->addSeries(area1);
2 chart->addSeries(area2);

5.图表综合效果设置:

 1 //设置动画效果
 2 chart->setAnimationOptions(QChart::AllAnimations);
 3 
 4 chart->createDefaultAxes();//设置网格线
 5 chart->axes(Qt::Horizontal).first()->setRange(0, 7);//设置x轴范围
 6 chart->axes(Qt::Vertical).first()->setRange(0, 20);//设置y轴范围
 7 
 8 // Add space to label to add space between labels and axis 在标签和轴之间加空格
 9 QValueAxis *axisY = qobject_cast<QValueAxis*>(chart->axes(Qt::Vertical).first());
10 Q_ASSERT(axisY);
11 axisY->setLabelFormat("%.1f  ");
12 
13 //设置图表主题(会修改到扇区的颜色)
14 // 可选: QChart::ChartThemeLight
15 // QChart::ChartThemeBlueCerulean
16 // QChart::ChartThemeDark
17 // QChart::ChartThemeBrownSand
18 // QChart::ChartThemeBlueNcs
19 // QChart::ChartThemeHighContrast
20 // QChart::ChartThemeBlueIcy
21 // QChart::ChartThemeQt
22 chart->setTheme(QChart::ChartThemeDark);

6.显示图表:

1 QChartView *chartView;
2 chartView = new QChartView(chart);
3 ui->verticalLayout->insertWidget(chartView);

代码整体呈现:

mainwindow.h

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QtCharts>
 6 
 7 QT_BEGIN_NAMESPACE
 8 namespace Ui { class MainWindow; }
 9 QT_END_NAMESPACE
10 
11 QT_CHARTS_BEGIN_NAMESPACE
12 class QChartView;
13 class QChart;
14 QT_CHARTS_END_NAMESPACE
15 
16 QT_CHARTS_USE_NAMESPACE
17 
18 class MainWindow : public QMainWindow
19 {
20     Q_OBJECT
21 
22 public:
23     MainWindow(QWidget *parent = nullptr);
24     ~MainWindow();
25     QChart * createAreaChart() const; // 绘制自定义的面积图
26 private:
27     Ui::MainWindow *ui;
28 };
29 #endif // MAINWINDOW_H

mainwindow.cpp

 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3 
 4 MainWindow::MainWindow(QWidget *parent)
 5     : QMainWindow(parent)
 6     , ui(new Ui::MainWindow)
 7 {
 8     ui->setupUi(this);
 9 
10     // 创建QChartView 对象
11     QChartView *chartView;
12     // QChartView 对象载入面积图
13     chartView = new QChartView(createAreaChart());
14     // 显示图标
15     ui->verticalLayout->insertWidget(chartView);
16 
17 }
18 
19 MainWindow::~MainWindow()
20 {
21     delete ui;
22 }
23 
24 //绘制面积图
25 QChart *MainWindow::createAreaChart() const
26 {
27 
28     QChart *chart = new QChart();
29     chart->setTitle("面积图演示");
30 
31     QLineSeries *series1 = new QLineSeries(chart);
32     series1->setName("A店铺接单数");
33 
34     series1->append(0,8);
35     series1->append(1,10);
36     series1->append(2,12);
37     series1->append(3,17);
38     series1->append(4,19);
39     series1->append(5,18);
40     series1->append(6,20);
41 
42     QLineSeries *series2 = new QLineSeries(chart);
43     series2->setName("B店铺接单数");
44     series2->append(0,1);
45     series2->append(1,4);
46     series2->append(2,5);
47     series2->append(3,3);
48     series2->append(4,11);
49     series2->append(5,16);
50     series2->append(6,19);
51 
52     QAreaSeries *area1 = new QAreaSeries(series1, 0);
53     QAreaSeries *area2 = new QAreaSeries(series2, series1);
54     area1->setName("A区域");
55     area2->setName("B区域");
56     chart->addSeries(area1);
57     chart->addSeries(area2);
58     chart->createDefaultAxes();
59     chart->axes(Qt::Horizontal).first()->setRange(0, 6);
60     chart->axes(Qt::Vertical).first()->setRange(0, 20);
61 
62     // Add space to label to add space between labels and axis在标签和轴之间加空格
63     QValueAxis *axisY = qobject_cast<QValueAxis*>(chart->axes(Qt::Vertical).first());
64     Q_ASSERT(axisY);
65     axisY->setLabelFormat("%.1f  ");
66     chart->setTheme(QChart::ChartThemeBrownSand);
67     return chart;
68 }

在这里插入图片描述

posted on 2021-01-21 16:50  一杯清酒邀明月  阅读(1205)  评论(0编辑  收藏  举报