编辑推荐
本书力求比较全面地介绍Qt C++开发应用程序的技术,有以下几个特点。
1.以Qt 5.9 LTS为开发用版本,是目前新版的Qt,未来三年内有持续的支持(上一个LTS版本是Qt 5.6)。
2.介绍了Qt Charts, Data Visualization模块的使用,这是Qt 5.7以后才出现在社区版Qt中的模块,其他书籍没有介绍过的。
3.专注讲解Qt C++编程,内容全面而深入。每个编程主题都精心设计了完整的实例程序,通过实例程序讲解主要类的使用。实例注重实际编程需求,很多实例代码可以直接用于应用程序开发。
4.本书内容安排上循序渐进,编程主题与实例的讲解也完全站在学习者的角度,既讲解原理,也讲解代码实现,让读者跟随着书的内容就能掌握技术要点。
内容简介
本书以Qt 5.9 LTS版本为开发平台,详细介绍了Qt C++开发应用程序的技术,包括Qt应用程序的基本架构、信号与槽工作机制、图形显示的Graphics/View架构、数据编辑和显示的Model/View架构、对话框和多窗口的设计与调用方法等,介绍了常用界面组件、文件读写、绘图、图表、数据可视化、数据库、多线程、网络和多媒体等模块的使用。每个编程主题都精心设计了完整的实例程序。通过阅读本书,可了解Qt C++开发应用程序所需的基本技术。本书适合具有C++语言编程基础,希望应用Qt C++开发跨平台应用程序的读者阅读。
作者简介
王维波,博士,主要从事地球物理探测仪器设计、数据处理方法研究和软件开发等工作,精通软硬件设计与开发。在实际研究和开发工作中发现Qt之利、Qt之美,与读者分享Qt开发经验。
栗宝鹃,博士,主要从事地球物理数据处理和成像的研究,在研究工作中将Qt用于专业软件的开发,精通Qt学习之道、应用之道。
侯春望,硕士,主要从事单片机系统和应用软件的教学和研究工作,精通Qt C++编程,曾开发多个专业应用软件。
目录
- 第1章 认识Qt1
- 1.1Qt简介1
- 1.2Qt的获取与安装1
- 1.2.1Qt的许可类型1
- 1.2.2Qt的版本2
- 1.2.3Qt的下载与安装2
- 1.3Qt Creator初步使用5
- 1.3.1Qt Creator的界面组成5
- 1.3.2Qt Creator的设置6
- 1.4编写一个Hello World程序7
- 1.4.1新建一个项目7
- 1.4.2项目的文件组成和管理10
- 1.4.3项目的编译、调试与运行11
- 1.5在Visual Studio里使用Qt13
- 第2章 GUI应用程序设计基础16
- 2.1UI文件设计与运行机制16
- 2.1.1项目文件组成16
- 2.1.2项目管理文件16
- 2.1.3界面文件17
- 2.1.4主函数文件19
- 2.1.5窗体相关的文件20
- 2.2可视化UI设计25
- 2.2.1实例程序功能26
- 2.2.2界面组件布局26
- 2.2.3信号与槽29
- 2.2.4可视化生成槽函数原型和框架30
- 2.3代码化UI设计34
- 2.3.1实例功能34
- 2.3.2界面创建34
- 2.3.3信号与槽的关联37
- 2.4混合方式UI设计37
- 2.4.1设计目的37
- 2.4.2创建项目并添加资源文件38
- 2.4.3设计Action39
- 2.4.4设计菜单和工具栏41
- 2.4.5代码创建其他界面组件44
- 2.4.6Action的功能实现45
- 2.4.7手工创建的组件的信号与槽47
- 2.4.8为应用程序设置图标48
- 2.5Qt Creator使用技巧48
- 第3章Qt类库概述50
- 3.1Qt核心特点50
- 3.1.1概述50
- 3.1.2元对象系统50
- 3.1.3属性系统52
- 3.1.4信号与槽53
- 3.1.5元对象特性测试实例55
- 3.2Qt全局定义59
- 3.2.1数据类型定义60
- 3.2.2函数60
- 3.2.3宏定义61
- 3.3容器类62
- 3.3.1容器类概述62
- 3.3.2顺序容器类63
- 3.3.3关联容器类64
- 3.4容器类的迭代66
- 3.4.1Java类型迭代器66
- 3.4.2STL类型迭代器68
- 3.4.3foreach关键字69
- 3.5Qt类库的模块70
- 3.5.1Qt基本模块71
- 3.5.2Qt附加模块71
- 3.5.3增值模块72
- 3.5.4技术预览模块72
- 3.5.5Qt工具73
- 第4章常用界面设计组件74
- 4.1字符串与输入输出74
- 4.1.1字符串与数值之间的转换74
- 4.1.2QString的常用功能76
- 4.2SpinBox的使用78
- 4.3其他数值输入和显示组件80
- 4.3.1实例功能80
- 4.3.2各组件的主要功能和属性80
- 4.3.3实例功能的代码实现82
- 4.4时间日期与定时器84
- 4.4.1时间日期相关的类84
- 4.4.2日期时间数据与字符串之间的转换84
- 4.4.3QCalendarWidget日历组件87
- 4.4.4定时器的使用87
- 4.5QComboBox和QPlainTextEdit89
- 4.5.1实例功能概述89
- 4.5.2QComboBox的使用89
- 4.5.3QPlainTextEdit的使用91
- 4.6QListWidget和QToolButton93
- 4.6.1实例功能简介93
- 4.6.2界面设计94
- 4.6.3QListWidget的操作97
- 4.6.4QToolButton与下拉式菜单99
- 4.6.5创建右键快捷菜单101
- 4.7QTreeWidget和QDockWidget102
- 4.7.1实例功能概述102
- 4.7.2界面设计103
- 4.7.3QTreeWidget操作105
- 4.7.4QLabel和Qpixmap显示图片110
- 4.7.5QDockWidget的操作111
- 4.8QTableWidget的使用112
- 4.8.1QTableWidget概述112
- 4.8.2界面设计与初始化113
- 4.8.3QTableWidget操作114
- 第5章Model/View结构120
- 5.1Model/View结构120
- 5.1.1Model/View基本原理120
- 5.1.2数据模型121
- 5.1.3视图组件122
- 5.1.4代理122
- 5.1.5Model/View结构的一些概念123
- 5.2QFileSystemModel125
- 5.2.1QFileSystemModel类的基本功能125
- 5.2.2QFileSystemModel的使用125
- 5.3QStringListModel127
- 5.3.1QstringListModel功能概述127
- 5.3.2QStringListModel的使用127
- 5.4QStandardItemModel130
- 5.4.1功能概述130
- 5.4.2界面设计与主窗口类定义131
- 5.4.3QStandardItemModel的使用132
- 5.5自定义代理139
- 5.5.1自定义代理的功能139
- 5.5.2自定义代理类的基本设计要求139
- 5.5.3基于QSpinBox的自定义代理类139
- 5.5.4自定义代理类的使用141
- 第6章对话框与多窗体设计143
- 6.1标准对话框143
- 6.1.1概述143
- 6.1.2QFileDialog对话框144
- 6.1.3QColorDialog对话框146
- 6.1.4QFontDialog对话框146
- 6.1.5QInputDialog标准输入对话框147
- 6.1.6QMessageBox消息对话框149
- 6.2自定义对话框及其调用150
- 6.2.1对话框的不同调用方式150
- 6.2.2对话框QWDialogSize的创建和使用152
- 6.2.3对话框QWDialogHeaders的创建和使用154
- 6.2.4对话框QWDialogLocate的创建与使用156
- 6.2.5利用信号与槽实现交互操作160
- 6.3多窗体应用程序设计162
- 6.3.1主要的窗体类及其用途162
- 6.3.2窗体类重要特性的设置163
- 6.3.3多窗口应用程序的设计165
- 6.4MDI应用程序设计170
- 6.4.1MDI简介170
- 6.4.2文档窗口类QFormDoc的设计171
- 6.4.3MDI主窗口设计与子窗口的使用173
- 6.5Splash与登录窗口176
- 6.5.1实例功能概述176
- 6.5.2对话框界面设计和类定义177
- 6.5.3QDlgLogin类功能实现178
- 6.5.4Splash登录窗口的使用181
- 第7章文件系统和文件读写182
- 7.1文本文件读写182
- 7.1.1实例功能概述182
- 7.1.2QFile读写文本文件182
- 7.1.3QFile和QTextStream结合读写文本文件184
- 7.1.4解决中文乱码的问题185
- 7.2二进制文件读写186
- 7.2.1实例功能概述186
- 7.2.2Qt预定义编码文件的读写187
- 7.2.3标准编码文件的读写192
- 7.3文件目录操作197
- 7.3.1文件目录操作相关的类197
- 7.3.2实例概述197
- 7.3.3QCoreApplication类199
- 7.3.4QFile类199
- 7.3.5QFileInfo类200
- 7.3.6QDir类201
- 7.3.7QTemporaryDir和QTemporaryFile203
- 7.3.8QFileSystemWatcher类203
- 第8章绘图206
- 8.1QPainter基本绘图206
- 8.1.1QPainter绘图系统206
- 8.1.2QPen的主要功能209
- 8.1.3QBrush的主要功能210
- 8.1.4渐变填充212
- 8.1.5QPainter绘制基本图形元件214
- 8.2坐标系统和坐标变换217
- 8.2.1坐标变换函数217
- 8.2.2坐标变换绘图实例218
- 8.2.3视口和窗口221
- 8.2.4绘图叠加的效果223
- 8.3Graphics View绘图架构224
- 8.3.1场景、视图与图形项224
- 8.3.2Graphics View的坐标系统226
- 8.3.3Graphics View相关的类227
- 8.3.4Graphics View程序基本结构和功能实现229
- 8.3.5Graphics View绘图程序实例235
- 第9章Qt Charts247
- 9.1Qt Charts概述247
- 9.1.1Qt Charts模块247
- 9.1.2一个简单的QChart绘图程序248
- 9.1.3图表的主要组成部分249
- 9.2QChart绘制折线图253
- 9.2.1实例功能253
- 9.2.2主窗口类定义和初始化253
- 9.2.3画笔设置对话框QWDialogPen256
- 9.2.4QChart的设置257
- 9.2.5QLineSeries序列的设置259
- 9.2.6QValueAxis坐标轴的设置261
- 9.3各种常见图表的绘制263
- 9.3.1实例功能概述263
- 9.3.2数据准备264
- 9.3.3柱状图267
- 9.3.4饼图270
- 9.3.5堆叠柱状图273
- 9.3.6百分比柱状图274
- 9.3.7散点图和光滑曲线图276
- 9.4图表的其他操作277
- 9.4.1实例功能概述277
- 9.4.2自定义QWChartView类278
- 9.4.3主窗口类的设计280
- 9.4.4实时显示光标处的数值281
- 9.4.5QLegendMarker的使用282
- 9.4.6图表的缩放283
- 第10章 Data Visualization284
- 10.1Data Visualization模块概述284
- 10.2三维柱状图285
- 10.2.1实例功能285
- 10.2.2主窗口设计286
- 10.2.3三维柱状图的创建287
- 10.2.4三维柱状图属性设置289
- 10.3三维散点图293
- 10.3.1绘制三维散点图293
- 10.3.2三维坐标轴的方向296
- 10.3.3散点形状与大小296
- 10.4三维曲面绘图296
- 10.4.1三维曲面图296
- 10.4.2三维地形图301
- 第11章 数据库305
- 11.1Qt SQL模块概述305
- 11.1.1Qt SQL支持的数据库305
- 11.1.2SQLite数据库306
- 11.1.3Qt SQL模块的主要类308
- 11.2QSqlTableModel的使用309
- 11.2.1实例功能309
- 11.2.2主窗口设计310
- 11.2.3打开数据表311
- 11.2.4添加、插入与删除记录319
- 11.2.5保存与取消修改319
- 11.2.6设置和清除照片320
- 11.2.7数据记录的遍历321
- 11.2.8记录排序322
- 11.2.9记录过滤322
- 11.3QSqlQueryModel的使用323
- 11.3.1QSqlQueryModel功能概述323
- 11.3.2使用QSqlQueryModel实现数据查询323
- 11.4QSqlQuery的使用327
- 11.4.1QSqlQuery基本用法327
- 11.4.2QSqlQueryModel和QSqlQuery联合使用328
- 11.5QSqlRelationalTableModel的使用336
- 11.5.1关系型数据表和实例功能336
- 11.5.2关系型数据模型功能实现338
- 第12章 自定义插件和库340
- 12.1自定义Widget组件340
- 12.1.1自定义Widget子类QmyBattery340
- 12.1.2自定义Widget组件的使用343
- 12.2自定义Qt Designer插件344
- 12.2.1创建Qt Designer Widget插件项目344
- 12.2.2插件项目各文件的功能实现346
- 12.2.3插件的编译与安装349
- 12.2.4使用自定义插件350
- 12.2.5使用MSVC编译器输出中文的问题352
- 12.3创建和使用静态链接库353
- 12.3.1创建静态链接库353
- 12.3.2静态链接库的使用354
- 12.4创建和使用共享库357
- 12.4.1创建共享库357
- 12.4.2使用共享库358
- 第13章 多线程362
- 13.1QThread创建多线程程序362
- 13.1.1QThread类功能简介362
- 13.1.2掷骰子的线程QDiceThread363
- 13.1.3掷骰子的多线程应用程序365
- 13.2线程同步367
- 13.2.1线程同步的概念367
- 13.2.2基于互斥量的线程同步368
- 13.2.3基于QReadWriteLock的线程同步371
- 13.2.4基于QWaitCondition的线程同步373
- 13.2.5基于信号量的线程同步377
- 第14章 网络编程383
- 14.1主机信息查询383
- 14.1.1QHostInfo和QNetworkInterface类383
- 14.1.2QHostInfo的使用384
- 14.1.3QNetworkInterface的使用386
- 14.2TCP通信388
- 14.2.1TCP通信概述388
- 14.2.2TCP服务器端程序设计390
- 14.2.3TCP客户端程序设计395
- 14.3QUdpSocket实现UDP通信397
- 14.3.1UDP通信概述397
- 14.3.2UDP单播和广播398
- 14.3.3UDP组播402
- 14.4基于HTTP协议的网络应用程序405
- 14.4.1实现高层网络操作的类405
- 14.4.2基于HTTP协议的网络文件下载406
- 第15章 多媒体409
- 15.1Qt多媒体模块功能概述409
- 15.2音频播放410
- 15.2.1使用QMediaPlayer播放音乐文件410
- 15.2.2使用QSoundEffect和Qsound播放音效文件415
- 15.3音频输入415
- 15.3.1使用QAudioRecorder录制音频415
- 15.3.2使用QAudioInput获取音频输入421
- 15.4视频播放428
- 15.4.1在QVideoWidget上播放视频428
- 15.4.2在QGraphicsVideoItem上播放视频431
- 15.5摄像头的使用433
- 15.5.1摄像头控制概述433
- 15.5.2实例主窗口设计与初始化435
- 15.5.3QCamera对象创建与控制436
- 15.5.4QCameraImageCapture抓取静态图片438
- 15.5.5QMediaRecorder视频录制439
- 第16章 应用程序设计辅助功能441
- 16.1多语言界面441
- 16.1.1多语言界面设计概述441
- 16.1.2tr()函数的使用441
- 16.1.3生成语言翻译文件442
- 16.1.4使用Qt Linguist翻译ts文件443
- 16.1.5调用翻译文件改变界面语言444
- 16.2使用样式表自定义界面446
- 16.2.1Qt样式表446
- 16.2.2Qt样式表句法447
- 16.2.3样式表的使用453
- 16.3使用QStyle设置界面外观455
- 16.3.1QStyle的作用455
- 16.3.2Qt内置样式的使用456
- 16.4Qt应用程序的发布457
- 16.4.1应用程序发布方式457
- 16.4.2Windows平台上的应用程序发布458