一、Qt Charts

Qt Charts是基于Qt Graphics View实现的一个图表的组件,可以用来在QT GUI程序中添加现在风格的、可交互的、以数据为中心的图表,可以用作QWidget或者 QGraphicsWidget,也可用在QML中。支持的图标类型有:折线图跟曲线图、面积图、饼图、柱状图等。

QT提供的相关的class有:

算了下,一共有48个类,实现一个图表并不需要全部用到,根据所需实现的图表,只需用到当中的几个就行,这些类,大致上可以分为如下几类:

  • QChartView Class

    一个用来显示图表的区域,或者理解为画布,可以在QChartView上实现所有Qt Chart支持的图表。QChartView的派生关系如下:

    QChartView <-- QGraphicsView <-- QAbstractScrollArea <-- QFrame <-- QWidget
  • QChart:QChart是QGraphicsWidget,可以在QGraphicsScene上显示,用来管理图表中的数据、图例、坐标轴等,QChart的派生关系如下:

    QChart <-- QGraphicsWidget <-- QGraphicsObject and QGraphicsLayoutItem  QGraphicsObject  <--  QObject and QGraphicsItem
  • 图表类型

  • QAbstractAxis:坐标轴

  • 图例:基类为QLegendMarker,在此基础上派生出不同的图例,如QAreaLegendMarker, QBarLegendMarker, QBoxPlotLegendMarker等

二、实现一个最简单的折线图

1、创建一个Qt Widgets Application工程,如下图:

给工程命名为qchart,

做一个比较简单的,选择基类为QDialog:

建成后的项目如下:

2、编辑UI文件

打开dialog.ui,添加Vertical Layout,然后选择水平布局,如下图:

3、添加chart库

  • 编辑pro文件:在pro文件中添加:QT += charts,如下:

  • .h声明命名空间(这里在dialog.h中添加)
using namespace QtCharts;

或者

QT_CHARTS_USE_NAMESPACE

编译运行,如果没有错误,运行结果如下:

4、添加QChartView

由于Qt Charts是基于Qt Graphics View实现的,要在UI应用中添加图表功能,首先需要个QGraphicsView,Qt Charts提供了QChartView,首先我们再这里添加QChartView:

  • 在头文件diloag.h中包含如下头文件
#include <QChartView>
  • 然后再类定义中添加变量:
class Dialog : public QDialog
{
Q_OBJECT public:
explicit Dialog(QWidget *parent = nullptr);
~Dialog(); private:
Ui::Dialog *ui; QChartView *ChartView;
};

其中

    QChartView *ChartView;

是新添加的,

  • 在Dialog构造函数中添加代码:
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this); ChartView = new QChartView(this);
ui->verticalLayout->addWidget(ChartView);
}

运行结果如下:

上图中,与之前的执行结果相比,多了个白色区域,说明QChartView添加成功,因为我们还没有添加任何图表所以是空白的,

5、实现图表

QChartView成功添加了后,还要添加管理图表中的序列、坐标轴、图例的QChart,首先添加相关头文件:

 #include <QChart>

然后在类定义中添加一个QChart,

QChart *chart;

最后,实例化 QChart,并添加到QChartView,代码如下:

Dialog::Dialog(QWidget *parent) :    QDialog(parent),    ui(new Ui::Dialog){
ui->setupUi(this);
chart = new QChart();
ChartView = new QChartView(this);
ChartView->setChart(chart);
ui->verticalLayout->addWidget(ChartView);
}

编译运行后如下:

结果跟上一个步骤一样,因为还没有添加任何图表类型,所以还是空白的,

6、添加折线图序列

添加了QChart后,就可以创建一些图表序列,添加到QChart,由于我们要实现的是折线图,这里使用QLineSeries,首先添加相关头文件:

#include "QLineSeries"

声明并实例化QLineSeries:

 QLineSeries* series = new QLineSeries();

然后给series添加几个点,并把series添加到chart中:

Dialog::Dialog(QWidget *parent) :    QDialog(parent),    ui(new Ui::Dialog){
ui->setupUi(this);
ui->setupUi(this);
chart = new QChart();
QLineSeries* series = new QLineSeries();
series->append(0, 6);
series->append(2, 4);
series->append(4,8);
series->append(8,10);
series->append(10,12);
chart->addSeries(series);
chart->createDefaultAxes();
ChartView = new QChartView(this);
ChartView->setChart(chart);
ui->verticalLayout->addWidget(ChartView);
}

运行结果如下:

到这里就实现了一个最简单的折线图了,

如果要实现其他的图表,如曲线图,只需要把第6部分的QLineSeries替换成QSplineSeries即可,当然不同的图表,也许会有些不一样

参考:

Qt Charts Overview

完整代码:qchart_01

学习Qt Charts-创建一个简单的折线图的更多相关文章

  1. [WCF学习笔记] 我的WCF之旅(1):创建一个简单的WCF程序

    近日学习WCF,找了很多资料,终于找到了Artech这个不错的系列.希望能从中有所收获. 本文用于记录在学习和实践WCF过程中遇到的各种基础问题以及解决方法,以供日后回顾翻阅.可能这些问题都很基础,可 ...

  2. Python框架学习之用Flask创建一个简单项目

    在前面一篇讲了如何创建一个虚拟环境,今天这一篇就来说说如何创建一个简单的Flask项目.关于Flask的具体介绍就不详细叙述了,我们只要知道它非常简洁.灵活和扩展性强就够了.它不像Django那样集成 ...

  3. WInform 创建一个简单的WPF应用

    (一)创建一个简单的WPF应用 首先,在这里我要说明的是:这里的例子,都是通过控制台程序来创建WPF应用,而非使用现成的WPF模版.因为WPF模版封装了创建WPF应用所需要的各种基本元素,并不利于我们 ...

  4. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)

    使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二) 以上两篇已经把流 ...

  5. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)

    梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...

  6. django创建一个简单的web站点

    一.新建project 使用Pycharm,File->New Project…,选择Django,给project命名 (project不能用test命名)   新建的project目录如下: ...

  7. 一个先进的App框架:使用Ionic创建一个简单的APP

    原文  http://www.w3cplus.com/mobile/building-simple-app-using-ionic-advanced-html5-mobile-app-framewor ...

  8. 【转】ios tableView那些事(一)创建一个简单的tableView

    工作也有半年多了!几乎每个项目中的会用到tableview这个神奇而好用的控件,在学习和工作中都会看别人的博客!对我有很大的帮助,就如同站在巨人的肩膀上的感觉吧 哈哈!于是决定重新开始写博客,希望能帮 ...

  9. Highcharts创建一个简单的柱状图

    新建一个html文件,将highcharts引入到你的页面后,通过两个步骤我们就可以创建一个简单的图表了. 1.创建div容器 在页面的 body部分创建一个div,并指定div 的 id,高度和宽度 ...

随机推荐

  1. C++ primer plus读书笔记——第15章 友元、异常和其他

    第15章 友元.异常和其他 1. 友元类的所有方法都可以访问原有类的私有成员和保护成员.另外,也可以做更严格的限制,只将特定的成员函数指定为另一个类的友元.哪些函数.成员函数.或类为友元是由类定义的, ...

  2. mysql 使用 source/mysqldump 命令导入/导出文件信息

    要导入/导出数据库信息,使用 mysql 的source命令可以方便快速的处理 以MAC为例: 一.mysqldump命令导出SQL文件 /usr/local/mysql/bin/mysqldump ...

  3. .NET程序崩溃了怎么抓 Dump ? 我总结了三种方案

    一:背景 1. 讲故事 最近几天接到了几个crash的求助,可能这几个朋友没玩过怎么去生成dump,只能手把手教,感觉也不是一个办法,所以有必要总结一下,后续再有朋友咨询的话,我就可以把这篇文章丢过去 ...

  4. Envoy:开启访问日志,access_log

    access_log: - name: envoy.listener.accesslog typed_config: "@type": type.googleapis.com/en ...

  5. [bug] Unrecognized token 'code': was expecting (JSON String, Number, Array, Object,'true', 'false' or 'null')

    JSON格式有误,需用JSON.stringify()函数转换一下 参考 https://www.cnblogs.com/sunyanblog/p/13788740.html https://www. ...

  6. 【例 3】 修改 bols 文件的 atime 和 mtime。 [root@localhost ~]# touch -d "2017-05-04 15:44" bols

    Linux touch命令:创建文件及修改文件时间戳 < Linux删除空目录(rmdir命令)Linux在文件之间建立软/硬链接(ln命令) > <Linux就该这么学>是一 ...

  7. 11.20 yum:自动化RPM包管理工具

    yum(Yellow dog Updater Modified)是多个Linux发行版的软件包管理器,例如Redhat RHEL.CentOS和Fedora.yum主要用于自动安装.升级rpm软件包, ...

  8. C语言编程 菜鸟练习100题(01-10)

    [练习1]输出 "Hello, World!" 0. 题目: 输出 "Hello, World!" 1. 分析: 使用 printf() 输出 "He ...

  9. 如何在Linux中自动删除或清理/tmp文件夹内容?

    每个Linux系统都有一个名为的目录/tmp,该目录已挂载了单独的文件系统. 它具有称为tmpfs的特殊文件系统.这是一个虚拟文件系统,操作系统将在系统引导时自动挂载/tmp挂载点. 如果要根据应用程 ...

  10. 80个Python练手项目列表

    80个Python练手项目列表   我若将死,给孩子留遗言,只留一句话:Repetition is the mother of all learning重复是学习之母.他们将来长大,学知识,技巧.爱情 ...