QTCharts入门 使用QChartView做折线图

您所在的位置:网站首页 做折线图软件叫什么来着 QTCharts入门 使用QChartView做折线图

QTCharts入门 使用QChartView做折线图

2023-12-20 05:34| 来源: 网络整理| 查看: 265

QTCharts入门 使用QChartView做折线图

引言

----------------------------------------------------------------------------------------------------------------------

      自从Qt发布以来,给广大跨平台界面研发人员带来了无数的福利。但是Qt自己却一直没有提供自带的组件库,这就使得QWT、QCustomPlot等第三方库有了巨大的生存空间,为了降低开发成本,大家都涌向了这些第三方库。这种情况一直持续到QTCharts的发布之前。QTCharts是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,  将图表绑定到视图

      7, 创建窗体并运行。

      下面来分别看一下:

1, 准备工作

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

      对于编译方式安装的Qt,需要注意在configure时不要跳过charts。

      对于安装包方式安装的Qt,需要注意在安装时,确保charts组件被选中。

2, 修改pro文件

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

1

QT+= charts

3, 提升widget控件为QChartView

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

      在弹出的界面中,填写"提升的类名称"为: QChartView,头文件名称会自动生成,我们不用关心。

      然后单击“添加”按钮即可。

      如果在提升界面的上半部分已经有我们需要的类"QChartView",那么只需要选中它,然后单击"提升"按钮即可。

4, 修改界面头文件

      在界面的头文件中,我们需要编写下面两行代码:

1

2

3

#include

QT_CHARTS_USE_NAMESPACE

#include "ui_xxxxx.h"

      请注意,两行加粗的代码必须写在#include  "ui_xxxxx.h"的前面,因为"ui_xxxxx.h"头文件也需要用到这里的宏定义。

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

5,  构建图表、构建系列

1

QChart* chart = new QChart();

      这行代码很简单,我们构建一个QChart对象。

1

2

3

4

QLineSeries *series = new QLineSeries();

for (quint32 i = 0; i < 100; i++) {

    series->append(i, sin(0.6f*i));

}

      上面的代码构建了一个折线系列对象,并且对它进行初始化。方法是调用append()接口,传递的参数x、y对用的是一组坐标数据。就是折线上的一个点。

      然后,我们将系列添加到图表,并创建默认的坐标轴。

1

2

chart->addSeries(series);      

chart->createDefaultAxes();        // 基于已添加到图表的 series 来创建默认的坐标轴

6,  将图表绑定到视图

1

ui.widget->setChart(chart);       

      widget是前面第3步中我们提升的控件对象。

7, 创建窗体并运行。

1

2

3

4

5

6

7

int main(int argc, char * argv[])

{

    QApplication app(argc, argv);

    CDialog dlg(NULL);

    dlg.exec();

    return 0;

}

      OK,编译运行一下试试吧。是不是很简单呢?

结语

----------------------------------------------------------------------------------------------------------------------

      本节我们通过将"Widget"控件提升为QChartView的方法完成了折线图的绘制。我们只修改了系列数据,其他的参数都采用默认方式,因此本节比较简单。下一节我们将演示直接使用QGraphicsView来完成本节功能的开发。后面的视频章节我们会陆续为大家介绍主题、样式设置、互操作、心电图等内容,敬请关注。

      关于QTCharts您还想知道什么,欢迎留言。

C++老鸟整理 90万字实战经验

----------------------------------------------------------------------------------------------------------------------

-Qt 5/PyQt 5实战指南》

 【此目录为书稿目录,正式出版的页码经排版后有出

-----------------------------------------------------------------

目录

第1章 准备工作        7

1.1        推荐的开发环境        7

1.2        安装Visual Studio 2017(简称VS2017)        7

1.3        安装Python        8

1.4        安装LLVM        11

1.5        安装Qt 5.11.1        11

第2章 pro与pri        15

2.1        案例1 通过一个简单的EXE来介绍pro的基本配置        15

2.2        案例2 整理一下目录吧        22

2.3        案例3 加点料-增加一张图片        31

2.4        知识点 pro文件常用配置        34

2.5        知识点 pri文件有啥用        39

2.6        知识点 一劳永逸,引入pri体系        45

2.7        案例4 还是不知道pri咋用?来练练手吧!        56

2.8        配套练习        60

第3章 多国语言国际化        63

3.1        案例5 怎样实现国际化        63

3.2        案例6 几种常见的国际化编程场景        68

3.3        知识点 God!全是英文,我的翻译呢?        71

3.4        配套练习        73

第4章 打基础        74

4.1        案例7 开发一个DLL(Dynamic Link Library动态链接库)        74

4.2        案例8 使用命名空间        79

4.3        案例9 QString的6个实用案例        83

4.4        案例10 用qDebug()输出信息        90

4.5        案例11 使用QVector处理数组        96

4.6        案例12 使用QList处理链表        105

4.7        案例13 使用QMap建立映射        110

4.8        案例14 万能的QVariant        116

4.9        案例15 使用QMessagebox弹出各种等级的提示信息        120

4.10        案例16 使用QInputDialog获取多种类型的用户输入        123

4.11        案例17 开发自己的公共类库        129

4.12        案例18 普通文本文件读写        135

4.13        案例19 XML格式的配置文件        142

4.14        案例20 INI格式的配置文件        149

4.15        案例21 把类对象序列化到二进制文件        153

4.16        案例22 从二进制文件反序列化类对象        160

4.17        案例23 类的XML格式序列化        166

4.18        案例24 类的二进制格式序列化-向前兼容        174

4.19        案例25 使用流方式读写XML        186

4.20        案例26 使用单体模式实现全局配置        196

4.21        案例27 读取GB13000编码的身份证信息        199

4.22        配套练习        206

第5章 对话框        211

5.1        知识点 Qt设计师的使用        211

5.2        知识点 在Designer中进行界面布局        221

5.3        案例28 对话框-走起        226

5.4        案例29 三种编程方式实现信号-槽开发        234

5.5        案例30 自定义signal与信号转发        241

5.6        案例31 disconnect的用途        243

5.7        案例32 消息阻塞-防止额外触发槽函数        246

5.8        案例33 信号-槽只能用在对话框里吗        250

5.9        案例34 对象之间还能怎么传递消息        252

5.10        案例35 编程实现控件嵌套布局        255

5.11        案例36 样式        258

5.12        案例37 使用QStackedLayout实现向导界面        266

5.13        案例38 定时器1        272

5.14        案例39 定时器2        277

5.15        配套练习        282

第6章 常用控件        287

6.1        案例40 使用QLabel显示文本或图片        287

6.2        案例41 使用行编辑器QLineEdit获取多种输入        290

6.3        案例42 使用下拉列表框QComboBox获取用户输入        296

6.4        案例43 使用列表框QListWidget展示数据列表        300

6.5        案例44 使用滑动条QSlider控制进度        305

6.6        配套练习        311

第7章 用QPainter实现自定义绘制        313

7.1        案例45 怎样进行自定义绘制        313

7.2        案例46 萌新机器人        317

7.3        案例47 机器人的新装        321

7.4        配套练习        324

第8章 模型视图代理        325

8.1        知识点 Qt的MVC简介        325

8.2        案例48 用QStandardItemModel构建树模型        329

8.3        案例49 使用代理实现属性窗        336

8.4        案例50 带子属性的属性窗        356

8.5        配套练习        374

第9章 开发SDI应用        375

9.1        案例51 开发一个SDI应用        375

9.2        案例52 使用自定义视图        376

9.3        案例53 添加主菜单        378

9.4        案例54 常规工具条        383

9.5        案例55 在状态栏上显示鼠标坐标        385

9.6        案例56 使用QSplashScreen为程序添加启动画面        388

9.7        案例57 工具条反显        393

9.8        案例58 打开文件对话框        394

9.9        案例59 浮动窗里的列表框        397

9.10        案例60 拖放        399

9.11        案例61 使用树视图做个工具箱        406

9.12        案例62 使用事项窗展示事项或日志        412

9.13        案例63 剪切、复制、粘贴        420

9.14        案例64 上下文菜单        428

9.15        案例65 利用属性机制实现动画弹出菜单        431

9.16        案例66 main()函数一般都写啥        439

9.17        配套练习        442

第10章 开发MDI应用        444

10.1        案例67 MDI-采用同一类型的View        444

10.2        案例68 MDI-采用不同类型的View        460

10.3        配套练习        477

第11章 重写Qt事件        478

11.1        知识点 QWidget事件简介        478

11.2        案例69 通过重写鼠标事件实现图元移动        479

11.3        案例70 通过重写键盘事件实现图元移动        484

11.4        知识点 无法切换到中文输入时该怎么办        486

11.5        配套练习        487

第12章 开发插件        488

12.1        知识点 什么是插件,插件用来干啥        488

12.2        案例71 怎样开发插件        490

12.3        配套练习        498

第13章 开发多线程应用        499

13.1        案例72 多线程&互斥锁        499

13.2        案例73 多线程应用中如何与主界面通信        507

13.3        案例74 使用QtConcurrent处理并发-Map模式        511

13.4        案例75 使用QtConcurrent处理并发-MapReduce        517

13.5        配套练习        522

第14章 开发网络应用        523

14.1        案例76 基于Qt的TCP/IP编程        523

14.2        案例77 TCP/IP多客户端编程        534

14.3        配套练习        556

第15章 PyQt 5基础        557

15.1        知识点 PyQt 5简介        557

15.2        知识点 搭建PyQt 5开发环境        561

15.3        案例78 编写第一个PyQt5程序        565

15.4        案例79 给应用加上图片        569

15.5        案例80 信号槽初探-窗口A调用窗口B        575

15.6        案例81 编写代码实现控件布局        577

15.7        案例82 在窗体A中嵌入自定义控件B        586

15.8        案例83 使用QLabel显示GIF动画        589

15.9        案例84 使用行编辑器QLineEdit获取多种输入        591

15.10        案例85 使用下拉列表框QComboBox获取用户输入        597

15.11        案例86 使用列表框QListWidget展示并操作列表        602

15.12        案例87 使用滑动条QSlider控制进度        606

15.13        案例88 使用QMessagebox弹出提示信息        612

15.14        案例89 使用QInputDialog获取用户输入        617

15.15        案例90 使用QFileDialog获取用户选择的文件名        623

15.16        案例91 把程序最小化到系统托盘        626

15.17        配套练习        630

第16章 PyQt 5进程内通信        632

16.1        知识点 PyQt 5中的信号-槽        632

16.2        案例92 使用自定义信号        635

16.3        案例93 带参数的自定义信号        637

16.4        案例94 信号比槽的参数少该咋办        642

16.5        案例95 使用QTimer实现定时器        644

16.6        案例96 使用timerEvent()实现定时器        647

16.7        案例97 使用QStackedLayout实现向导界面        650

16.8        配套练习        656

第17章 PyQt 5实现自定义绘制        657

17.1        案例98 怎样进行自定义绘制        657

17.2        案例99 萌新机器人        661

17.3        案例100 机器人的新装        666

17.4        配套练习        669

第18章 PyQt 5中的模型视图代理        670

18.1        案例101 用QStandardItemModel构建树模型        670

18.2        案例102 最简单的属性窗        675

18.3        案例103 使用代理实现属性窗        677

18.4        案例104 自定义属性窗        682

18.5        案例105 带子属性的属性窗        693

18.6        配套练习        705

第19章 PyQt 5开发SDI应用        707

19.1        案例106 开发一个SDI应用        707

19.2        案例107 使用自定义视图        708

19.3        案例108 添加主菜单        709

19.4        案例109 常规工具条        715

19.5        案例110 在状态栏上显示鼠标坐标        717

19.6        案例111 使用QSplashScreen为程序添加启动画面        720

19.7        案例112 工具条反显        723

19.8        案例113 浮动窗里的列表框        725

19.9        案例114 拖放        727

19.10        案例115 使用树视图做个工具箱        735

19.11        案例116 使用事项窗展示事项或日志        739

19.12        案例117 剪切、复制、粘贴        747

19.13        案例118 上下文菜单        754

19.14        配套练习        757

第20章 PyQt 5开发MDI应用        759

20.1        案例119 MDI-采用同一类型的View        759

20.2        案例120 MDI-采用不同类型的View        773

20.3        配套练习        783

第21章 PyQt 5事件        784

21.1        案例121 通过重写鼠标事件实现图元移动        784

21.2        案例122 通过重写键盘事件实现图元移动        789

21.3        配套练习        790

第22章 PyQt 5开发多线程应用        791

22.1        案例123 多线程&互斥锁        791

22.2        案例124 多线程应用中如何刷新主界面        796

22.3        配套练习        799

第23章 项目实战-C++版        801

23.1        案例125 项目实战准备-访问SQLite数据库        801

23.2        案例126 项目实战准备-使用QCustomPlot绘制曲线        807

23.3        案例127 项目实战-敏捷看板        811

第24章 项目实战-PyQt版        828

24.1        案例128 项目实战准备-访问SQLite数据库        828

24.2        案例129 项目实战准备-用Matplotlib绘制曲线        834

24.3        案例130 项目实战-敏捷看板        837

附录A        859

A.1 PyQt 5常用类所在模块  859     

------



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3