一、前言

自从 Qt 发布以来,给广大跨平台界面研发人员带来了无数的福利。但是Qt自己却一直没有提供自带的图表库,这就使得 QWT、QCustomPlot 等第三方图表库有了巨大的生存空间,为了降低开发成本,大家都涌向了这些第三方库。这种情况一直持续到 Qt5.7 版本后 Qt Charts 的发布。Qt Charts 是 Qt 自带的组件库,包含折线、曲线、饼图、棒图、散点图、雷达图等等各种常用的图表。只是要注意协议的约束:GPLV3。

我们今天使用 QChartView 来做折线图。QChartView 派生自 QGraphicsView,但它可专门用来展示 QChart 图表。

二、概念热身

先给大家做一下概念热身。

坐标轴-QAbstractAxis:

图表中,一般都有 X、Y 坐标轴,复杂一些的还带有 Z 轴。对应到 Qt 的图表也有 X、Y 轴对象。但是今天,我们先不展开介绍。如果我们不创建轴坐标对应的对象,可以使用 Qt 的默认轴对象。后面我们会介绍用法。

系列-QAbstractSeries:

不论是曲线、饼图、棒图还是其他图表,其中展示的内容本质都是数据。一条曲线是一组数据,一个饼图也对应一组数据。在 Qt Charts 中,这些一组组的数据被称作系列。对应不同类型的图表 Qt 提供了不同的系列。系列除了负责存储、访问数据,应该还提供了数据的绘制方法,比如折线图和曲线图分别对应 QLineSerie 和 QSPLineSerie。我们可以用不同的系列达到不同的展示目的。

图例-Legend:

类似于 Excel,Qt Charts 中也提供了图例,并且还可以显示或者隐藏图例。

图表-QChart

Qt 提供了 QChart 类来封装前面所说的内容,比如坐标轴、系列、图例等。QChart 承担了一个组织、管理的角色。QChart 派生自 QGraphicsObject,因此它实际上是一个图元 item。我们可以从 QChart 获取到坐标轴对象、数据系列对象、图例等等,并且可以设置图表的主题、背景色等样式信息。

视图-QChartView:

负责 QChart 的展示。QChart 本身只负责图表内容的组织、管理。图表的展示由视图负责,这个视图就是 QChartView。QChartView 派生自 QGraphicsView,只是它专门提供了几个面向 QChart 的接口,比如 setChart(QChart*)等。

三、正文

好了概念热身完毕,下面进入主题:用 QChartView 绘制折线图。

步骤如下:

1、准备工作;

2、修改 pro 文件;

3、 提升 widget 控件为 QChartView;

4、修改头文件;

5、构建图表、构建系列,并将图表绑定到视图;

6、运行程序。

下面来分别看一下:

1、准备工作

需要在安装 Qt 时带上了 charts,否则后面工作无法开展。

  • 对于编译方式安装的 Qt,需要注意在 configure 时不要跳过 charts。
  • 对于安装包方式安装的 Qt,需要注意在安装时,确保 charts 组件被选中。

新建一个 Qt Widgets Application 项目。

2、修改 pro 文件

在 pro 中,使用如下语句包含 charts 库:

QT += charts

3、 提升 widget 控件为 QChartView

在绘制 ui 窗体时,从 designer 的工具箱中选择一个 “Widget” 类型的控件,然后在它上面单击鼠标右键,选择 “提升为”。

在弹出的界面中,填写 "提升的类名称" 为: QChartView,头文件名称会自动生成,我们不用关心。然后单击“添加”按钮即可。

4、修改头文件

在头文件中,我们需要添加下面两行代码:

#include <QtCharts>
QT_CHARTS_USE_NAMESPACE

这两句代码的作用是包含 QChart 所需的头文件,并声明 Qt Charts 的命名空间。

5、构建图表、构建系列,并将图表绑定到视图

在 Wdiget 的构造函数中添加以下代码:

// 构建图表对象
QChart* chart = new QChart(); // 构建折线系列对象
QLineSeries *series = new QLineSeries();
for (quint32 i = 0; i < 100; i++)
{
// 参数 x 为循环自增变量 i,参数 y 为正弦函数Y值
series->append(i, sin(static_cast<double>(0.6f*i)));
} // 将系列添加到图表
chart->addSeries(series);
// 基于已添加到图表的 series 来创建默认的坐标轴
chart->createDefaultAxes(); // 将图表绑定到视图
ui->widget->setChart(chart);

上面的代码构建了一个 QChart 对象,然后构建了一个折线系列对象,并且对它进行初始化。方法是调用 append() 接口,传递的参数 x、y 对应的是一组坐标数据,就是折线上的一个点。然后,将系列添加到图表,并创建默认的坐标轴。最后,将图表绑定到视图。

6、运行程序

运行程序,效果如下:

用Qt Charts绘制,大概分为四个部分:数据(QXYSeries)、图表(QChart)、坐标轴(QAbstractAXis)和视图(QChartView)。

要注意的是 QChart要先添加数据(QXYSeries),再加载坐标轴(加载轴的过程是先添加轴到 Chart 上,再附加轴到 Series 上)。

参考:

QTCharts入门 使用QChartView做折线图

Qt 绘制图表 - Qt Charts版的更多相关文章

  1. 网页绘制图表 Google Charts with JavaScript #2 ....与ASP.NET网页结合 (ClientScriptManager.RegisterStartupScript 方法)

    此为文章备份,原文出处(我的网站) 网页绘制图表 Google Charts with JavaScript #2 ....与ASP.NET网页结合 (ClientScriptManager.Regi ...

  2. 网页绘制图表 Google Charts with JavaScript #1....好强、好简单啊!

    此为文章备份,原文出处(我的网站) 网页绘制图表 Google Charts with JavaScript....好强.好简单啊!#1 http://www.dotblogs.com.tw/mis2 ...

  3. ASP.NET(Web Form)绘制图表 -- Google Chart 三部曲

    ASP.NET(Web Form)绘制图表 -- Google Chart 三部曲 ASP.NET(Web Form)绘制图表 -- Google Chart 三部曲 1.  网页绘制图表 Googl ...

  4. iOS - Quartz 2D 第三方框架 Charts 绘制图表

    1.Charts 简介 使用第三方框架 Charts 绘制 iOS 图表.GitHub 源码 Charts Charts 是一款用于绘制图表的框架,可以绘制柱状图.折线图.K线图.饼状图等.Chart ...

  5. QT绘制饼图

    QT版本:QT5.6.1 QT绘制饼图,出问题的代码如下 void DrawPieDialog::paintEvent(QPaintEvent *event) { float startAngle=0 ...

  6. Qt代码覆盖率code coverage(VS版)

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt代码覆盖率code coverage(VS版)     本文地址:http://techi ...

  7. Qt绘制简单的风向玫瑰图代码

    1.绘制简单的风向玫瑰图代码2.主要使用QPainter3.在子widget上绘制需要使用widget监视事件 eventfilter update();//更新界面 //镜头12 QPainter ...

  8. Qt 学习之路 2(24):Qt 绘制系统简介

    Qt 学习之路 2(24):Qt 绘制系统简介 豆子 2012年10月30日 Qt 学习之路 2 77条评论 Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制.整个绘图系统基于Q ...

  9. c++学习书籍推荐《C++ GUI Qt 4编程(第2版)》下载

    下载地址:点我 百度云及其他网盘下载地址:点我 编辑推荐 <C++ GUI Qt 4编程(第2版)>讲授的大量Qt4编程原理和实践,都可以轻易将其应用于Qt4.4.Qt4.5及后续版本的Q ...

随机推荐

  1. kali渗透综合靶机(六)--FristiLeaks靶机

    kali渗透综合靶机(六)--FristiLeaks靶机 靶机地址下载:https://download.vulnhub.com/fristileaks/FristiLeaks_1.3.ova 一.主 ...

  2. 如何取消 SqlDataAdapter.Fill() 的执行(转载)

    问 Scenario: We have a DataGridView which is attached to DataAdapter (datatable), we load the data in ...

  3. C# 方法默认访问级别 : private C# 类默认访问级别 : internal

    C# 方法默认访问级别 : private C# 类默认访问级别 : internalpublic:访问不受限制.protected:访问仅限于包含类或从包含类派生的类型.Internal:访问仅限于 ...

  4. Visual Studio 2017使用ODT 连接Oracle 数据库出现异常

    2019.5.23 更新 突然发现原来是是sqlnet.ora在搞鬼,只要将SQLNET.AUTHENTICATION_SERVICES=(nts)  改为 SQLNET.AUTHENTICATION ...

  5. CSS3 transform 属性(2D,3D旋转)

    一.语法 div{ transform:rotate(7deg); -ms-transform:rotate(7deg); /* IE 9 */ -moz-transform:rotate(7deg) ...

  6. 使用 vue-cli(脚手架)搭建项目

    一.使用 vue-cli(脚手架)搭建项目 1) Vue-cli 是 vue 官方提供的用于搭建基于 vue+webpack+es6 项目的脚手架工具 2) 在线文档:https://github.c ...

  7. FCC-学习笔记 Sorted Union

    FCC-学习笔记  Sorted Union 1>最近在学习和练习FCC的题目.这个真的比较的好,推荐给大家. 2>中文版的地址:https://www.freecodecamp.cn/; ...

  8. Ubuntu16.04的搭建l.2.t.p.d(宿舍访问公司内网)

    主要的实现步骤 openswan(ipsec) : 提供一个密钥 ppp :提供用户名和密码 xl2tpd : 提供L2TP服务 sysctl : 提供服务器内部转发 iptables : 提供请求从 ...

  9. https抓包 Fiddler

    打开Fiddler https抓包 安装证书 查看证书 打开Windows程序certmgr.msc 查找Fiddler证书 查看Fiddler证书是否安装成功 测试连接 使用Google Chrom ...

  10. Nexus6P 设置Debug模式

    一劳永逸,设置手机进入Debug模式实现完美Root 使用mkbootimg进行boot.ing编辑 将修改的系统官方Rom包中的boot.ing和mkbooting工具中的mkboot.mkboot ...