QT draws histogram QBarSeries

Related links:
QT draws a pie chart PieChart
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 QBarSet object:

QBarSet *set0 = new QBarSet("A日常开支"); //设置直方图类别名称
QBarSet *set1 = new QBarSet("B日常开支");
// 设置类别的数值序列
*set0 << 2010 << 1200 << 860 << 3104 << 1322 << 4532;
*set1 << 766 << 435 << 3225 << 1348 << 4883 << 233;

3. Create a QBarSeries object:

QBarSeries  *series = new QBarSeries (chart);
series->append(set0);// QBarSeries添加QBarSet
series->append(set1);

4. Add QBarSeries to QChart

chart->addSeries(series);

5. Chart comprehensive effect settings:

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

// 设置横坐标的字符串
QStringList categories;
categories << "饮食开支" << "交通开支" << "教育开支" << "购物开支" << "生活缴费" << "娱乐开支";  //保存横坐标字符串的列表

chart->createDefaultAxes();// 设置网格
chart->setAxisX(axis, series);
chart->axes(Qt::Vertical).first()->setRange(0,5000); // 设置y轴数值范围


series->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);  //设置柱状图标签显示的位置
series->setLabelsVisible(true);  //设置柱状图数据标签可见

// Add space to label to add space between labels and axis在标签和轴之间加空格
QValueAxis *axisY = qobject_cast<QValueAxis*>(chart->axes(Qt::Vertical).first());
Q_ASSERT(axisY);
axisY->setLabelFormat("%.2f  ");

6. Display chart:

QChartView *chartView;
chartView = new QChartView(chart);
ui->verticalLayout->insertWidget(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 * createBarChart() 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(createBarChart());
	// 显示图标
	ui->verticalLayout->insertWidget(0,chartView);

}

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

// 绘制直方图 
QChart *MainWindow::createBarChart() const
{
     QChart *chart = new QChart();
     chart->setTitle("直方图演示");

     QBarSet *set0 = new QBarSet("A日常开支");
     QBarSet *set1 = new QBarSet("B日常开支");

     *set0 << 2010 << 1200 << 860 << 3104 << 1322 << 4532;
     *set1 << 766 << 435 << 3225 << 1348 << 4883 << 233;


     QBarSeries  *series = new QBarSeries (chart);
     series->append(set0);
     series->append(set1);


     chart->addSeries(series);
     chart->setAnimationOptions(QChart::SeriesAnimations);

     QStringList categories;
     categories << "饮食开支" << "交通开支" << "教育开支" << "购物开支" << "生活缴费" << "娱乐开支";  //保存横坐标字符串的列表
     QBarCategoryAxis *axis = new QBarCategoryAxis();
     axis->append(categories);
     chart->createDefaultAxes();
     chart->setAxisX(axis, series);
     chart->axes(Qt::Vertical).first()->setRange(0,5000);



     // Add space to label to add space between labels and axis在标签和轴之间加空格
     QValueAxis *axisY = qobject_cast<QValueAxis*>(chart->axes(Qt::Vertical).first());
     Q_ASSERT(axisY);
     axisY->setLabelFormat("%.2f  ");

     series->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);  //设置标签显示的位置
     series->setLabelsVisible(true);  //设置数据标签可见

     //设置主题 
     chart->setTheme(QChart::ChartThemeBlueCerulean);

    return chart;
}

Insert picture description here

Guess you like

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