zoukankan      html  css  js  c++  java
  • 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 }

    在这里插入图片描述

  • 相关阅读:
    无服务器架构(Faas/Serverless)
    Cookie中的sessionid与JSONP原理
    requestAnimationFrame
    JS函数的防抖和节流
    JS 中的广度与深度优先遍历
    堆、栈和队列
    Java除法和js
    selected
    找jar包
    编辑器替换操作
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14308926.html
Copyright © 2011-2022 走看看