Qt Charts入门

一、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

这个宏一般写在头文件中,我们来看看这个宏长什么样:
Qt Charts入门_第1张图片
我们发现其实就是使用了QtCharts的命名空间,也就是上面这个宏也可以写成:

using namespace QtCharts;

不过既然Qt为我们做了这一层封装,我们直接使用这个宏就好了。这个宏的定义在头文件qchartglobal.h中,所以如果我们需要使用这个宏就需要添加头文件:

#include 

这样,我们就可以使用Qt Charts 模块了。

四、模块学习
Qt里面那么多示例都是一个个单独的工程,为了方便,我们将这些示例放在同一个工程之中,使用菜单进行切换,如下图:
Qt Charts入门_第2张图片
Qt Charts入门_第3张图片
一个图表大致可分为三个部分:Series、Chart、View。
①Series确定了图表的基本类型(区域图、条形图、折线图、曲线图、饼状图、散点图等),类的继承关系如下图所示:
Qt Charts入门_第4张图片
②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);

你可能会问,啥是图例?下图标记的就是:
Qt Charts入门_第5张图片
④创建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

你可能感兴趣的:(QT)