Qt QChart 绘制面积图 QAreaSeries


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 }

在这里插入图片描述


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM