QT -- QChart画柱状图

QChart:

The QChart class manages the graphical representation of the chart's series, 
legends, and axes.
QChart is a QGraphicsWidget that you can show in a QGraphicsScene. It manages the
 graphical representation of different types of series and other chart related 
class QChartView can be used instead of QChart. In addition, line, spline, area,
 and scatter series can be presented as polar charts by using the QPolarChart class.

QChart类管理图表系列、图例和轴的图形表示。
QChart是一个可以在QGraphicsScene中显示的QGraphicsWidget。
它管理不同类型的系列和其他图表相关对象(如图例和轴)的图形表示。
要简单地在布局中显示图表,可以使用便利类QChartView代替QChart。
此外,直线、样条、面积和散射级数可以通过QPolarChart类来表示为极坐标图.

使用QChart 要在安装Qt的选择QChart 模块 否则 不能使用!!!
使用QChart 要在安装Qt的选择QChart 模块 否则 不能使用!!!
使用QChart 要在安装Qt的选择QChart 模块 否则 不能使用!!!

pro 加入 QT += charts

并且在程序的开头加上一句 using namespace Qtcharts或者一个宏 QT_CHARTS_USE_NAMESPACE

先来了解几个部分

QBarSet:

#include <QBarSet> 
QBarSet(const QString label, QObject *parent = Q_NULLPTR)//构造

QBarSet类表示条形图中的一组条形。
一个bar集包含每个类别的一个数据值。
假设集合的第一个值属于第一个类别,
第二个属于第二个类别,依此类推。
如果集合的值小于类别的值,则假设缺失值位于集合的末尾。对于位于集合中间的缺失值,则使用0的数值。
没有显示零值集的标签。

QT -- QChart画柱状图

 

 

 这 竖 立 五 个 条 就 是 QBarSet:

    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;// 名字为 Jane 竖条的 6个值 (分别代表6个月的值)  <<符号表示赋值
    *set1 << 5 << 0 << 0 << 4 << 0 << 7;
    *set2 << 3 << 5 << 8 << 19<< 8 << 5;
    *set3 << 5 << 6 << 7 << 3 << 4 << 5;
    *set4 << 9 << 7 << 5 << 3 << 1 << 2;

QBarSeries:

#include <QBarSeries> 
QBarSeries(QObject *parent = Q_NULLPTR)

QBarSeries类以垂直条的形式呈现一系列数据,按类别分组。
这个类将数据绘制为一系列按类别分组的竖线,每个类别中有一个竖线添加到这个系列中。
请参阅柱状图示例,了解如何创建分组柱状图

    QBarSeries *series = new QBarSeries();
    series->append(set0);
    series->append(set1);
    series->append(set2);
    series->append(set3);
    series->append(set4);
//把上面5个人的 6个月的值放到 series 待会显示
//在QChart绘图中,append()的作用主要是给柱、饼、折线赋值之类(个人理解)

QBarCategoryAxis:

#include <QBarCategoryAxis> 

QBarCategoryAxis(QObject *parent = Q_NULLPTR)

QBarCategoryAxis类将类别添加到图表的轴中。
可以设置QBarCategoryAxis来显示带有标记、网格线和阴影的轴线。在刻度之间绘制类别。
它还可以与线系列一起使用,如line和BarChart示例所示。

    QStringList categories;
    categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun";
    QBarCategoryAxis *axis = new QBarCategoryAxis();
    axis->append(categories);

//QBarCategoryAxis:柱状图坐标文字描述
//QValueAxis:设置坐标轴范围

QT -- QChart画柱状图

Qt 的demo:

#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QBarSeries>
#include <QtCharts/QBarSet>
#include <QtCharts/QLegend>
#include <QtCharts/QBarCategoryAxis>

QT_CHARTS_USE_NAMESPACE

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

//![1]
    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;// Jane 6个月份的值
    *set1 << 5 << 0 << 0 << 4 << 0 << 7;
    *set2 << 3 << 5 << 8 << 19<< 8 << 5;
    *set3 << 5 << 6 << 7 << 3 << 4 << 5;
    *set4 << 9 << 7 << 5 << 3 << 1 << 2;
//![1]

//![2]
    QBarSeries *series = new QBarSeries();
    series->append(set0);
    series->append(set1);
    series->append(set2);
    series->append(set3);
    series->append(set4);

//![2]

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

//![4]
    QStringList categories;
    categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun";
    QBarCategoryAxis *axis = new QBarCategoryAxis();
    axis->append(categories);
    chart->createDefaultAxes();//创建默认的左侧的坐标轴(根据 QBarSet 设置的值)
    chart->setAxisX(axis, series);//设置坐标轴
//![4]

//![5]
    chart->legend()->setVisible(true); //设置图例为显示状态
    chart->legend()->setAlignment(Qt::AlignBottom);//设置图例的显示位置在底部
//![5]

//![6]
    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);
//![6]

//![7]
    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(420, 300);
    window.show();
//![7]

    return a.exec();
}

如果数据量大(百万数据不卡顿)并且交互多的话 推荐使用QCustomplot

上一篇:【Swing编写图形用户界面】操作系统之磁盘调度算法图形界面和性能比较


下一篇:使用python操作excel画图