QT绘制直方图 QBarSeries

相关链接:
QT绘制饼状图PieChart
QT绘制折线图LineChart
QT绘制曲线图SplineChart
QT绘制散点图ScatterChart
QT绘制面积图AreaChart

0.创建ui窗口:

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

1.创建Qchart对象:

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

2.创建QBarSet对象:

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.创建QBarSeries对象:

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

4.将QBarSeries添加到QChart

chart->addSeries(series);

5.图表综合效果设置:

//设置动画效果
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.显示图表:

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

代码整体呈现:

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;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sazass/article/details/112877752
今日推荐