前言
QAbstractSeries 继承自 QObject,是所有 Qt Chart series 的基类。
通常使用其特定的继承类而非基类,例如:柱状图、面积图、箱形图、饼图、线性图、曲线图、散点图。
绘制条形图需要用到3个类
• QBarSeries: 用于创建有由一系列数据组成
• QChart: 图表界面,用来管理图表内容,颜色,大小等
• QChartView: 负责显示QChart
mywidget.h :
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QtCharts/QChartGlobal>
#include <QtCharts/QChart>
#include <QtCharts/QChartView>
#include <QtWidgets/QWidget>
#include <QtWidgets/QGraphicsWidget>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGraphicsGridLayout>
#include <QtWidgets/QDoubleSpinBox>
#include <QtWidgets/QGroupBox>
#include <QtCharts/QBarSeries>
#include <QtCharts/QBarSet>
#include <QtCharts/QValueAxis>
#include <QtCharts/QBarCategoryAxis>
QT_CHARTS_USE_NAMESPACE
class myWidget : public QWidget
{
Q_OBJECT
public:
myWidget(QWidget *parent = 0);
~myWidget();
QChart *m_chart;
QChartView *m_chartview;
QGridLayout *m_gridlayout;
QBarSet *set0;
QBarSet *set1;
QBarSet *set2;
};
#endif // MYWIDGET_H
mywidget.cpp :
#include "mywidget.h"
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
{
m_chart = new QChart();
m_chartview = new QChartView(m_chart,this);
m_gridlayout = new QGridLayout();
m_gridlayout->addWidget(m_chartview,0,0,1,1);
setLayout(m_gridlayout);
/*添加barset*/
//添加一组数据,每组数据有三个series
set0 = new QBarSet("零食"); //
set1 = new QBarSet("水果");
set2 = new QBarSet("主食");
/*一共显示五组数据*/
*set0 << 158 << 685 << 458 << 260 << 354; //向零食数据添加这5个月的销售数据
*set1 << 350 << 725 << 602 << 523 << 458;
*set2 << 222 << 350 << 598 << 480 << 687;
set0->setLabelColor(QColor(0,0,255)); //设置条形数据颜色
set1->setLabelColor(QColor(0,0,255));
set2->setLabelColor(QColor(0,0,255));
QBarSeries *series = new QBarSeries();
series->append(set0);
series->append(set1);
series->append(set2);
series->setVisible(true);
series->setLabelsVisible(true);
m_chart->addSeries(series);//添加系列到QChart上
/*设置legend样式 颜色 大小 位置等*/
m_chart->legend()->setVisible(true); //是否允许对legend进行设置,就相当于一个总开关,只有打开了才能对legend进行操作
m_chart->legend()->setAlignment(Qt::AlignBottom); //设置位置
m_chart->legend()->setBackgroundVisible(true);
m_chart->legend()->setAutoFillBackground(true);
m_chart->legend()->setColor(QColor(222,233,251));//设置颜色
m_chart->legend()->setLabelColor(QColor(0,100,255));//设置标签颜色
m_chart->legend()->setMaximumHeight(50);//设置最大高度
/*设置横纵坐标*/
QBarCategoryAxis *AxisX = new QBarCategoryAxis();
QValueAxis *AxisY = new QValueAxis();
AxisX->append("一月");
AxisX->append("二月");
AxisX->append("三月");
AxisX->append("四月");
AxisX->append("五月");
AxisX->setLabelsColor(QColor(7,28,96));
AxisY->setRange(0,600);
m_chart->setAxisX(AxisX,series);
m_chart->setAxisY(AxisY,series);
}
注意点:
1:条形图的x轴坐标设置,在曲线图或者饼状图中 我们设置x轴和y轴使用的类是QValueAxis
我们为x和y轴设置的是一个范围。我们常见的条形图的横坐标往往并不是一些数值范围,而是一些需要统计的对象名称或者是某一段时间,这时候QValueAxis
就不太适合这种情况,所以我们使用了另一个派生类QBarCategoryAxis
他和QValueAxis
都继承于QAbstractAxis
,QBarCategoryAxis
是可以有用户自定x轴的。
2:QBarSet
的 用法,QBarSet &QBarSet::operator<<(const qreal &value)
一种方便的操作符,用于将值指定的实值追加到栏集的末尾。他可以向qdebug()用法一样使用<<符号向里面追加设定值。如:*barset0 << 158 << 685 << 458 << 260 << 354;