関連リンク:
QTは、円グラフ円グラフ描画
QTは、折れ線グラフ折れ線グラフ描画
QTはグラフSplineChart曲線描く
QTは、散布図ScatterChart描画
QTは、面グラフのAreaChartを描画します
0. UIウィンドウを作成します:
主に1つドラッグします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;
}