QtCharts 柱状图

简述

        本文主要介绍Qt柱状图的简单用法。以及改造为多组柱状图、多彩柱状图。

 示例1:柱状图

在pro文件中加入 QT += charts,主要用到的头文件有:

#include <QtCharts>
#include <QBarSeries>
#include <QBarCategoryAxis>
#include <QVBoxLayout>

 以下是创建柱状图的代码:

void MainWindow::initBarChart()
{
    QChart* chart = new QChart;
    chart->legend()->setVisible(false);
    chart->setTitle("柱状图");

    QChartView* chartView = new QChartView(this);
    chartView->setRenderHint(QPainter::Antialiasing);
    chartView->setChart(chart);

    //加入到主界面中
    QVBoxLayout* layout = new QVBoxLayout;
    layout->addWidget(chartView);
    ui->centralwidget->setLayout(layout);

    //设置X轴
    QBarCategoryAxis* category_axis_x = new QBarCategoryAxis(chart);
    chart->addAxis(category_axis_x, Qt::AlignBottom);

    //设置X轴标签
    QStringList categories = { "A", "B", "C", "D", "E"};
    category_axis_x->setCategories(categories);

    //设置Y轴
    QValueAxis* axis_y = new QValueAxis(chart);
    chart->addAxis(axis_y, Qt::AlignLeft);

    //创建柱状图
    QBarSeries* bar_series = new QBarSeries(chart);
    chart->addSeries(bar_series);

    //加入坐标轴
    bar_series->attachAxis(category_axis_x);
    bar_series->attachAxis(axis_y);

    //创建1组柱状图
    QBarSet* set = new QBarSet("", chart);
    bar_series->append(set);

    //设置数据
    QList<qreal> list_data = {9,8,7,6,5};
    set->append(list_data);

    //设置显示范围
    axis_y->setRange(0, 10);

    //设置Y轴刻度数
    axis_y->setTickCount(3);
}

示例2:多组柱状图 

以下是创建多组柱状图的代码:

void MainWindow::initBarChart2()
{
    QChart* chart = new QChart;
    chart->legend()->setVisible(false);

    QChartView* chartView = new QChartView(this);
    chartView->setRenderHint(QPainter::Antialiasing);
    chartView->setChart(chart);

    //加入到主界面中
    QVBoxLayout* layout = new QVBoxLayout;
    layout->addWidget(chartView);
    ui->centralwidget->setLayout(layout);

    //设置X轴
    QBarCategoryAxis* category_axis_x = new QBarCategoryAxis(chart);
    chart->addAxis(category_axis_x, Qt::AlignBottom);
    //设置X轴标签
    QStringList categories = { "A", "B", "C", "D", "E"};
    category_axis_x->setCategories(categories);

    //设置Y轴
    QValueAxis* axis_y = new QValueAxis(chart);
    chart->addAxis(axis_y, Qt::AlignLeft);

    //创建柱状图
    QBarSeries* bar_series = new QBarSeries(chart);
    chart->addSeries(bar_series);

    bar_series->attachAxis(category_axis_x);
    bar_series->attachAxis(axis_y);

    //设置3列数据
    QBarSet* set1 = new QBarSet("", chart);
    QBarSet* set2 = new QBarSet("", chart);
    QBarSet* set3 = new QBarSet("", chart);

    bar_series->append(set1);
    bar_series->append(set2);
    bar_series->append(set3);

    QList<qreal> list_data1 = {9,8,7,6,5};
    QList<qreal> list_data2 = {5,6,9,3,5};
    QList<qreal> list_data3 = {4,2,6,9,3};
    set1->append(list_data1);
    set2->append(list_data2);
    set3->append(list_data3);

    //设置显示范围
    axis_y->setRange(0, 10);

    //设置Y轴刻度数
    axis_y->setTickCount(3);
}

示例3:多彩柱状图  

以下是创建多彩柱状图的代码:

void MainWindow::initColorfulBarChart()
{
    QChart* chart = new QChart;
    chart->legend()->setVisible(false);

    QChartView* chartView = new QChartView(this);
    chartView->setRenderHint(QPainter::Antialiasing);
    chartView->setChart(chart);

    //加入到主界面中
    QVBoxLayout* layout = new QVBoxLayout;
    layout->addWidget(chartView);
    ui->centralwidget->setLayout(layout);

    //设置X轴
    QBarCategoryAxis* category_axis_x = new QBarCategoryAxis(chart);
    chart->addAxis(category_axis_x, Qt::AlignBottom);
    //设置X轴标签
    QStringList categories = { "A", "B", "C", "D", "E"};
    category_axis_x->setCategories(categories);

    //设置Y轴
    QValueAxis* axis_y = new QValueAxis(chart);
    chart->addAxis(axis_y, Qt::AlignLeft);

    //创建柱状图, 这里将QBarSeries改为QStackedBarSeries, 为了使柱子的位置在中间
    QStackedBarSeries* bar_series = new QStackedBarSeries(chart);
    chart->addSeries(bar_series);

    bar_series->attachAxis(category_axis_x);
    bar_series->attachAxis(axis_y);

    //设置数据
    QList<int> list_data = {9,8,7,6,5};
    //设置颜色
    QStringList list_color = {"#63b2ee","#76da91","#f8cb7f","#f89588","#7cd6cf"};

    int top_count = categories.size();

    //加入多组QBarSet,为了设置不同的颜色
    QList<QBarSet*> list_bars;
    for (int i = 0; i < top_count; i++) {
        QBarSet* set = new QBarSet("", chart);
        list_bars << set;

        for (int j = 0; j < top_count; j++) {
            *set << 0;
        }

        //设置条形图颜色
        set->setColor(list_color[i]);
        set->setBorderColor(QColor(list_color[i]));
        bar_series->append(set);
    }

    //更新数据
    for (int i = 0; i < top_count; i++) {
        list_bars[i]->replace(i, list_data[i]);
    }

    //设置显示范围
    axis_y->setRange(0, 10);

    //设置Y轴刻度数
    axis_y->setTickCount(3);
}

        一组柱状图只能设置一种颜色,这里本质上就是多组柱状图, 不需要显示的列设置为0了而已。将多组柱状图中用到的QBarSeries改为了QStackedBarSeries,是为了让柱子的位子在中间,而不是靠左。

         

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值