Qt例子学习笔记 - Examples/Qt-6.2.0/charts/barchart

//创建条形图
//条形图在所有条形图中的使用方式相同。
//为了说明各种条形图之间的差异
//我们在示例中使用了相同的数据。
//条形图可视化的数据由 QBarSet 实例定义。
//在这里,我们创建集合并将数据附加到它们。
//数据在此处附加了 << 运算符。
//或者,可以使用 append 方法。

    QBarSet *set0 = new QBarSet("Jane");
    QBarSet *set1 = new QBarSet("John");
    QBarSet *set2 = new QBarSet("Axel");
    QBarSet *set3 = new QBarSet("Mary");
    QBarSet *set4 = new QBarSet("Samantha");

    *set0 << 1 << 2 << 3 << 4 << 5 <<6;
    *set1 << 5 << 0 << 0 << 4 << 0 <<7;
    *set2 << 3 << 5 << 8 << 13 << 4 <<5;
    *set3 << 5 << 6 << 7 << 3 << 4 << 5;
    *set4 << 9 << 7 << 5 << 3 << 1 << 2;

//我们创建系列并将条形集附加到它。
//该系列拥有 barsets 的所有权。
//该系列将数据从集合分组到类别。
//每组的第一个值按第一类第二个值分组到第二类,依此类推。

    QBarSeries *series = new QBarSeries();
    series->append(set0);
    series->append(set1);
    series->append(set2);
    series->append(set3);
    series->append(set4);

//在这里,我们创建图表对象并向其添加系列。
//我们使用 setTitle 设置图表的标题,然后通过调用
//setAnimationOptions(QChart::SeriesAnimations) 打开系列的动画

    QChart *chart = new QChart();
    chart->addSeries(series);
    chart->setTitle("Simple barchart example");
    chart->setAnimationOptions(QChart::SeriesAnimations);

//要在轴上显示类别,我们需要为此创建一个 QBarCategoryAxis。
//在这里,我们创建一个带有类别列表的类别轴,
//并将其设置为与底部对齐
//充当 x 轴,并将其附加到系列中。
//图表拥有轴的所有权。
//对于 y 轴,我们使用与左侧对齐的值轴。

    QStringList categories;
    categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun";
    QBarCategoryAxis *axisX = new QBarCategoryAxis();   
    axisX->append(categories);
    chart->addAxis(axisX,Qt::AlignBottom);
    series->attachAxis(axisX);  

//我们也想展示 legend。为此,我们从图表中获取图例指针并将其设置为可见。
//我们还通过将其对齐设置为 Qt::AlignBottom 将图例放置在图表的底部。

    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignBottom);

//最后,我们将图表添加到视图中。
//我们还为图表视图打开了抗锯齿功能。

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

//图表已准备好显示。
//我们将图表设置为窗口的中央小部件。
//我们还设置图表窗口的大小并显示它。

    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(420,300);
    window.show();
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QBarSeries>
#include <QtCharts/QBarSet>
#include <QtCharts/QLegend>
#include <QtCharts/QBarCategoryAxis>
#include <QtCharts/QValueAxis>

QT_USE_NAMESPACE

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //条形集包含每个类别的一个数据值。
    //假设集合的第一个值属于第一个类别,第二个值属于第二个类别,依此类推。
    //如果集合的值少于类别数,则假定缺失值位于集合的末尾。
    //对于集合中间的缺失值,使用数值为零。
    //零值集的标签未显示。

    QBarSet *set0 = new QBarSet("Jane");
    QBarSet *set1 = new QBarSet("John");
    QBarSet *set2 = new QBarSet("Axel");
    QBarSet *set3 = new QBarSet("Mary");
    QBarSet *set4 = new QBarSet("Samantha");

    *set0 << 1 << 2 << 3 << 4 << 5 << 6;
    *set1 << 5 << 0 << 0 << 4 << 0 << 7;
    *set2 << 3 << 5 << 8 << 13 << 8 << 5;
    *set3 << 5 << 6 << 7 << 3 << 4 << 5;
    *set4 << 9 << 7 << 5 << 3 << 1 << 2;

    //此类将数据绘制为一系列按类别分组的垂直条形
    //每个条形集中的每个类别一个条形添加到该系列中。
    //bool QAbstractBarSeries::append(QBarSet *set)
    //将 set 指定的一组条添加到条系列并取得它的所有权。
    //如果 set 为 null 或它已经属于该系列,则不会追加。
    //如果附加成功,则返回 true。
    QBarSeries *series = new QBarSeries();
    series->append(set0);
    series->append(set1);
    series->append(set2);
    series->append(set3);
    series->append(set4);


    //QChart 是一个 QGraphicsWidget,您可以在 QGraphicsScene 中显示它。
    //它管理不同类型系列和其他图表相关对象(如图例和轴)的图形表示。
    //为了简单地在布局中显示图表,可以使用便利类 QChartView 代替 QChart。
    //此外,可以使用 QPolarChart 类将折线、样条曲线、面积和散点序列显示为极坐标图。
    //QGraphicsWidget 类是 QGraphicsScene 中所有小部件项的基类     
    QChart *chart = new QChart();
    //void QChart::addSeries(QAbstractSeries *series)
    //将系列系列添加到图表并取得它的所有权。
    //注意:默认情况下,新添加的系列不附加到任何轴,
    //即使是在将系列添加到图表之前使用 createDefaultAxes() 为图表创建的系列也不例外。
    //如果在显示图表之前没有轴附加到新添加的系列,则该系列将被绘制,
    //就好像它的轴的范围完全适合该系列到图表的绘图区域。
    //如果同一图表还显示具有正确附加轴的其他系列,
    //这可能会令人困惑,因此请始终确保在添加系列后调用 createDefaultAxes() 或为系列显式附加轴。

    chart->addSeries(series);
    chart->setTitle("Simple barchart example");
    //此属性保存图表的动画选项。
    //根据此设置启用或禁用动画。
    //图表中启用了系列动画。
    chart->setAnimationOptions(QChart::SeriesAnimations);

    QStringList categories;
    categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun";
    //QBarCategoryAxis 可以设置为显示带有刻度线
    //网格线和阴影的轴线。
    //类别绘制在刻度之间。
    //它也可以与线系列一起使用,如 Line 和 BarChart 示例所示。
    //以下代码说明了如何使用 QBarCategoryAxis:
    /*
        QChartView *chartView = new QChartView;
        QBarSeries *series = new QBarSeries;

        //...
        chartView->chart()->addSeries(series);
        chartView->chart()->createDefaultAxes();

        QBarCategoryAxis *axisX = new QBarCategoryAxis;
        QStringList categories;
        categories<<"Jan"<<"Feb"<<"Mar"<<"Apr"<<"May"<<"Jun";
        axisX->append(categories);
        axisX->setRange("Feb","May");
        chartView->chart()->setAxisX(axisX,series);
    */
    QBarCategoryAxis *axisX = new QBarCategoryAxis();
    //void QBarCategoryAxis::append(const QStringList &categories)
    //将类别附加到轴。
    //轴上的最大值将更改为匹配最后一个类别。
    //如果之前未定义类别,则轴上的最小值也将更改以匹配类别。
    //类别必须是有效的 QString 并且不能重复。
    //不会附加重复的类别。

    axisX->append(categories);
    //void QChart::addAxis(QAbstractAxis *axis, Qt::Alignment alignment)
    //将轴轴添加到由alignment指定对齐的图表。
    图表拥有轴的所有权。
    chart->addAxis(axisX, Qt::AlignBottom);
    //bool QAbstractSeries::attachAxis(QAbstractAxis *axis)
    //将轴指定的轴附加到系列。
    //如果轴连接成功,则返回 true,否则返回 false。
    series->attachAxis(axisX);

    //可以设置值轴以显示带有刻度线、
    //网格线和阴影的轴线。 轴上的值绘制在刻度线的位置。
    //以下示例代码说明了如何使用 QValueAxis 类
    /*
        QCharView *chartView = new QChartView;
        QLineSeries *series = new QLineSeries;
        //...
        chartView->chart()->addSeries(series);

        QValueAxis *axisX = new QValueAxis;
        axisX->setRange(10,20.5);
        axisX->setTickCount(10);
        axisX->setLabelFormat("%.2f");
        chartView->chart()->setAxisX(axisX,series); 

    */
    //void QValueAxis::setRange(qreal min, qreal max)
    //设置轴上从最小值到最大值的范围。
    //如果 min 大于 max,则此函数返回而不做任何更改。
    //setTickCount
    //此属性保存轴上的刻度线数。 这表示在图表上绘制了多少条网格线。
    //默认值为 5,数量不能小于 2。
    //setLabelFormat
    //此属性保存轴的标签格式。
    //setAxisX(AbstractAxis axis, AbstractSeries series)
    //将系列的 x 轴设置为轴。



    QValueAxis *axisY = new QValueAxis();
    axisY->setRange(0,15);
    chart->addAxis(axisY, Qt::AlignLeft);
    series->attachAxis(axisY);

    //QLegend *QChart::legend() const
    //返回图表的图例对象。 所有权保留在图表中。
    //图例是显示图表图例的图形对象。
    //当系列更改时,图例状态由 QChart 更新。
    //默认情况下,图例附加到图表
    //但可以分离以使其独立于图表布局。
    //无法创建或删除图例对象
    //但可以通过 QChart 类引用它们。
    chart->legend()->setVisible(true);
    //图例如何与图表对齐。
    chart->legend()->setAlignment(Qt::AlignBottom);

    //图表视图不需要 QGraphicsScene 对象即可工作。
    //要在现有 QGraphicsScene 中显示图表
    //应改用 QChart 或 QPolarChart 类。
    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);

    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(420, 300);
    window.show();

    return a.exec();
}

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值