一、Qt Charts简介
Qt Charts模块提供一组易于使用的图表组件。它使用了Qt的图形视图框架,因此图表可以很容易集成到现代用户界面。Qt 图表可以用作QWidgets,QGraphicsWidget 或者 QML 类型。用户可以通过选择一个图表主题(如柱状图,饼状图,折线图等)轻松地创建令人印象深刻的图表。Qt Charts 模块是在Qt5.7才集成进去的,早些时候的版本不支持这个模块。
二、如何学习Qt Charts
Qt 为 Qt Charts 提供了一系列示例,我们可以打开Qt助手Assistant搜索qtcharts_examples或者打开Qt Creator里面的示例并搜索关键字charts即可看到Qt 的栗子。
三、如何使用Qt Charts 模块
1、在工程文件(.pro)文件中添加Qt Charts 模块:
QT += charts
2、使用Qt Charts 的C++ 类(族),我们用下面这个宏就可以搞定:
QT_CHARTS_USE_NAMESPACE
这个宏一般写在头文件中,我们来看看这个宏长什么样:
我们发现其实就是使用了QtCharts的命名空间,也就是上面这个宏也可以写成:
using namespace QtCharts;
不过既然Qt为我们做了这一层封装,我们直接使用这个宏就好了。这个宏的定义在头文件qchartglobal.h中,所以如果我们需要使用这个宏就需要添加头文件:
#include
这样,我们就可以使用Qt Charts 模块了。
四、模块学习
Qt里面那么多示例都是一个个单独的工程,为了方便,我们将这些示例放在同一个工程之中,使用菜单进行切换,如下图:
一个图表大致可分为三个部分:Series、Chart、View。
①Series确定了图表的基本类型(区域图、条形图、折线图、曲线图、饼状图、散点图等),类的继承关系如下图所示:
②Chart用来管理Series以及其他图表相关对象(坐标轴、图例等等),使用的类是QChart。QChart继承自QGraphicsWidget
③View用来将Chart显示出来,使用的类是QChartView。QChartView继承自QGraphicsView。
折线图
①使用QLineSeries类创建一个对象:
QLineSeries *series = new QLineSeries;
②添加点,形成折线
使用append方法或者使用流的形式:
series->append(0, 6);
series->append(2, 4);
series->append(3, 8);
series->append(7, 4);
series->append(10, 5);
*series << QPointF(11, 1) << QPointF(13, 3) << QPointF(17, 6) << QPointF(18, 3) << QPointF(20, 2);
③创建一个QChart对象并将series 添加到QChart对象中,并获得其所有权:
QChart *chart = new QChart;
chart->addSeries(series);
接下来我们使用QChart的一些方法来对图表进行管理,比如:
为图表设置标题:
chart->setTitle("Line Chart");
创建坐标轴:
chart->createDefaultAxes();
注意坐标轴的创建要在addSeries之后,如果在addSeries之前就调用了createDefaultAxes,那么这个坐标轴是没有意义的。
设置图例是否可见:
chart->legend()->hide();
chart->legend()->show();
chart->legend()->setVisible(false);
chart->legend()->setVisible(true);
你可能会问,啥是图例?下图标记的就是:
④创建QChartView对象
QChartView *chartView = new QChartView(chart);
我们以QChart为参数创建一个QChartView对象,这里并不是将chart设为父。我们看QChartView的构造函数:
explicit QChartView(QChart *chart, QWidget *parent = Q_NULLPTR);
这样我们就不需要自己创建QGraphicsView场景。
QChartView类主要是用来显示图表的,对于外观的设置可以通过这个类来完成。比如,设置抗锯齿让渲染的线条看起来更好:
chartView->setRenderHint(QPainter::Antialiasing);
至此,一个基本的折线图就完成了,其他的基本图表也大差不差。
代码部分已上传至GitHub:https://github.com/Hhuazai/Qt-Charts