本文主要是通过一本书来大致了解Qt开发的框架,不对具体内容做详细分析。
1.首先弄清楚概念:定义->以自己的话理解是什么-> 实现的是什么功能->用在哪些地方
2.前面认识到的知识点的特点-> 代码实现-> 工程代码分析
第一部分 Linux基础知识
第二部分 Qt程序基础
第5章 OtCreator下载与安装
5.1 QtCreator下载
5.1.1 使用软件中心下载QtCreator
5.1.2 访问Qt网站下载相关资源
5.2 第一个Qt程序
5.3 QtCreator介绍
5.3.1 QtCreator界面介绍
5.3.2 编译、调试、发布设置
5.4 QtDesigner介绍
第6章 Qt基础
6.1 Qt概述与特性
6.1.1 Qt简介
6.1.2 Qt特性
Qt SDK包括:Qt库、Qt Creator IDE、 Qt工具:Qt Designer、Qt Linguist(消除国际化流程障碍)、Qt Assistant.
6.2 Qt与Xll的关系
6.2.1 什么是X11
6.2.2 Qt与Xl1
6.3 Qt与KDE的关系
6.3.1 KDE简介
6.3.2 Qt与KDE
6.4 Qt库和组件
Qt SDK中主要包括类库、开发工具、平台相关支持、授权许可等。
其中类库包含了Qt的所有对外发布的功能组件:
1)Core: Qt4的基本模块,定义了其他模块使用的Qt核心的非 GUI类,所有其他模块都依赖于该模块。
2)GUI: 定义了图形用户界面类
3)WebKit:提供了一个在Qt中使用Web Browser的渲染与解析引擎。
4)Graphic View:提供的是一种 Qt Model-View编程模式,既可以管理大数量的定制2D graphical items,又可以与它们交互,由于一个视图窗口可以把这些项绘制出来,并支持旋转与缩放。
5)Scripting: 提供了对脚本(如:Java、Python、Perl、Ruby)的支持。
6) OpenGL
7)XML: 定义了处理XML(eXtensible Markup Language)语言的类。
8)Multimedia: 提供了播放媒体源的功能。
9)Database: 提供了与平台和数据库种类无关的SQL访问接口。
10)Network: 定义了Qt的网络编程类。
11)Unit Test:定义了对Qt应用程序和库进行单元测试的类。
6.4.1 QtSDK简介
6.4.2 Qt主要组件介绍
就现在在座的项目应该关注多媒体类的应用。
第7章 Qt编程方法
7.1 Qt应用程序的基本结构
7.1.1 Qt工程文件
以标签选项的结构进行组织的
常用标签项:
TEMPLATE/SOURCES/HEADERS/FORMS/TARGET/DESTDIR/INCLUDEPATH/DEPENDPATH/CONFIG等
针对不同需求建立Makefile;
指定可执行应用程序名称;
声明引用的Qt拓展模块;
指定编译器所要使用的选项和所需链接的库;
所有头文件和源文件列表;
所有的.ui文件列表;
......
思考:工程文件中对应的标签项默认值都是什么?
7.1.2 头文件和源文件
7.1.3 元对象文件
元对象系统这样工作:
● Q_OBJECT宏声明一些内省函数(metaObject(),TR(),qt_matacall()和少量其他的函数)。这些函数必须在所有的QObject的子类中被实现。
● Qt的moc工具负责执行被Q_OBJECT宏声明的函数,同时负责执行所有的信号函数。
● QObject的成员函数,例如connect()和disconnect(),使用内省函数来工作。
元对象系统基于以下三类:
1)、QOBJECT类;
2)、类声明中的私有段的Q_OBJECT宏;
3)、元对象编译器。
Moc读取C++源文件。如果它发现其中包含一个或多个类的声明中含有Q_OBJECT宏,它就会给含有Q_OBJECT宏的类生成另一个含有元对象代码的C++源文件。这个生成的源文件可以被类的源文件包含(#include)到或者和这个类的实现一起编译和连接。
除了提供对象间通讯的信号和槽机制之外(这也是介绍这个系统的主要原因),QObject中的元对象代码也实现其它特征:
1)、className()函数在运行的时候以字符串返回类的名称,不需要C++编译器中的运行时刻类型识别(RTTI)的支持。
2)、inherits()函数返回这个对象是否是一个继承于QObject继承树中一个特定类的类的实例。
3)、tr()和trUtf8()两个函数是用于国际化的字符串翻译。
4)、setPorperty()和property()两个函数是用来通过名称动态设置和获得对象属性的。
5)、metaObject()函数返回这个类所关联的元对象。
虽然使用QObject作为一个基类而不使用Q_OBJECT宏和元对象代码是可以的,但是如果Q_OBJECT宏没有被使用,那么这里的信号和槽以及其它特征描述都不会被提供。根据元对象系统的观点,一个没有元代码的QObject的子类和它含有元对象代码的最近的祖先相同。举例来说就是,className()将不会返回你的类的实际名称,返回的是它的这个祖先的名称。我们强烈建议QObject的所有子类使用Q_OBJECT宏,而不管它们是否实际使用了信号、槽和属性。
关于moc以及元对象个人理解:
是实现C++程序拓展的自动完善代码的机制。
7.2 程序资源与管理
7.2.1 界面交互文件(.ui)
7.2.2 程序资源文件(.qrc)
应用程序使用到的所有附加资源,如图片、国际化翻译文件之类的资源。
7.3 应用程序的创建
7.3.1 创建GUI程序
7.3.2 创建库工程
类似于动态库
7.3.3 创建console程序
第8章 信号与槽
8.1 概述
8.1.1 信号
8.1.2 槽
8.2 信号与槽的关联
8.2.1 单信号与槽的实例
8.2.2 多信号与槽的实例
8.3 元对象工具
8.4 应注意的问题
第9章 Qt事件
9.1 Qt事件机制
9.1.1 什么是Qt事件
Qt事件(也可自定义Qt事件)
异步处理事件:
1)原生事件(SPontaneous)
2)转发事件(Posted)
同步处理事件:
3)发送事件(sent)
常见Qt事件
其他一些非常见的Qt事件,比如socket、剪切板事件、字体改变、布局改变等。
9.1.2 Qt事件的响应
对应有事件处理函数
9.1.3 自定义Qt事件
包括定义、事件注册、实现自定义事件响应函数
9.2 Qt事件的过滤
让一个对象监听另外一个对象所接收到的事件。
9.2.1 Qt事件的派发
9.2.2 安装事件过滤器
过滤器?
9.3 Qt事件的截获
提供了获取操作系统底层的事件的方法
9.3.1 截获win32窗口消息
举一个例子:可以使程序接收到一个来自其他进程发送来的窗口消息后,在其列表控件中添加此消息中所附带的文本信息。
9.3.2 截获xll窗口事件
9.4 Qt按键事件实例
第10章 MVC模型/视图
Model-View-Controller(MVC)是一种设计模式,常用来构建用户界面。MVC把交互系统的组成分解成模型(Model)、视图(View)、控制(Controller)三个部件。
10.1 Qt的Model/View架构
10.2 Qt中Model/View相关类
10.3 典型实例
10.3.1 QcolumnView类
列视图模型
10.3.2 QlistView类
列表视图模型,可以设置列表的效果:列表底色、列表项是否可编辑
10.3.3 QTableView类
表格视图模型
10.3.4 QtreeView类
树形视图模型
第三部分 Qt界面设计
第11章 Qt常用控件
11.1 按钮控件
11.1.1 QPushButton类
11.1.2 QButtonGroup类和QRadioButton类
QButtonGroup类将多个QButton窗口控件组合在一起。它是一组按钮的父窗口控件,也就是说它是按钮构造函数中的parent参数。
QRadioButton类则是单选按钮控件,一般与QButtonGroup类结合使用来控制组群的唯一性。
11.2 文本类控件
11.2.1 QLineEdit类
单行文本输入框
11.2.2 QTextEdit类
单页面多信息文本编辑器:提供了三种文本操作模式:一般文本编辑器、多信息文本编辑器和文本查看器。
11.3 时间类控件
11.3.1 QTime类和QTimeEdit类
QTime类:提供了时钟的时间功能,通常由给定的时、分、钟和毫秒来创建,也可以通过读取当前时间来创建,还可以通过给定字符串来创建。
QTimeEdit类:时钟显示控件。
11.3.2 QDate类和QDataEdit类
QDate类提供了日期功能。
QDataEdit类是一个日期显示控件。
11.3.3 QCalendarWidget类
QCalendarWidget类提供了一个日历控件,它允许用户简单直观地选择日期。
11.4其他控件
11.4.1 QCombox类
下拉列表框控件,它为用户提供了一组可以选择的下拉列表。
11.4.2 QLCDNumber类
LCD显示控件,用于显示数字。
11.4.3 QProgressBar类
横或者竖着的进度条控件,用于显示目前的工作进度(文件复制、文件下载、程序安装等)。
11.4.4 QSpinBox类和QDoubleSpinBox类
都是微调控件,QSpinBox类常用来手动设置整数和一些其他数据的集合,而QDoubleSpinBox类常用来设置浮点数。
11.4.5 QSlider类
QSlider类是一个横或者竖着滑动条控件,该类通过滑块控制一个绑定变量的值。
11.4.6 QTreeWidget类
一种树形的部件。
11.4.7 QTabWidget类
一个Tab导航页的窗口部件。
第12章 布局管理
为了放置控件部件尽可能节省空间,且美观,而出现了布局管理器。
12.1 Qt布局管理介绍
绝对位置法
人工位置法
布局管理器方式
前两种都是通过调用setGeometry()函数来设置子窗口部件在父窗口中显示的位置和大小。
12.2 布局管理器
布局管理器负责在父窗口部件区域内存放子窗口部件。布局管理器可以使其中的窗口部件自动定位并重新调整他们的位置和大小。
12.2.1 QHBoxLayout
按水平方向存放窗口部件
12.2.2 QVBoxLayout
按垂直方向存放窗口部件
12.2.3 QGridLayout
按二维网格方式存放窗口部件
12.2.4 QFormLayout
按表单形式存放窗口部件
12.2.5 QStackedLayout
按类似栈方式存放窗口部件
12.3 综合实例
第13章 对话框
13.1 QDialog类
是所有对话框类的基类。继承于QWidget类。对话框窗口分为模式、非模式和半模式三种类型,主要用于短期任务及用户进行交互。
13.2 子类化QDialog类
什么叫子类化?
13.3 常用标准对话框
Qt提供了一整套内置窗口部件和常用对话框,下面是其中几种。
13.3.1 QColorDialog类
一个指定颜色对话框的窗口部件,该窗口部件允许用户为某一对象指定颜色,比如选择画刷的颜色
13.3.2 QFileDialog类
一个选择文件或者目录的对话框窗口部件。
13.3.3 QFontDialog类
一个选择字体的对话框窗口部件,该窗口部件允许用户设置字体的样式。
13.3.4 QMessageBox类
按需弹出消息框给用户各种各样的提示。
13.3.5 QProgressDialog类
一个慢动作(复制文件、安装应用程序等)的进度反馈窗口部件。
第14章 QMainWindow主窗口应用程序
14.1 简介
14.2 菜单栏、工具栏与状态栏
14.2.1 菜单栏
14.2.2 工具栏
14.2.3 状态栏
14.3 工作区
14.4 滚动视图与锚接窗口
14.4.1 滚动视图
针对需要编辑的文本过多的情况下,添加一个滚动条。
14.4.2 锚接窗口
锚接窗口是可以锚接到锚接区域中的窗口。工具栏就是最常见的实例。
14.5 完整代码
第四部分 进阶应用
第15章 Qt容器类 (个人理解这章是为了提升编程的高效性,程序的健壮性)
用在那些地方?怎么使用?
容器是指容纳特定类型对象的集合,是将最常用的一些数据结构实现出来。
容器分为序列式和关联式两种。
标准模板库(STL)包含大多数的经典数据结构。
15.1 通用顺序容器
QVector<T>:Qt提供的,通过在连续内存中顺序存储各元素来提高访问效率。
理解一下使用容器实现的冒泡排序。
15.2 迭代器
迭代器工作在用户与容器之间,规范和简化元素的存取访问的一组对象。
15.2.1 Java风格迭代器
15.2.2 STL风格迭代器
15.2.3 STL风格迭代器与通用算法
15.2.4 综合应用
15.3 通用链式容器
15.3.1 类摘要
15.3.2 常用操作函数
15.3.3 访问元素
15.4 关联容器
15.4.1 类摘要
15.4.2 常用操作函数
15.4.3 访问元素
第16章 文件操作
16.1 QFile类
一个操作文件的输入输出设备,用来读写二进制文件和文本文件的。
16.1.1 读写二进制流文件
16.1.2 读写文本
16.2 目录操作
16.3 文件管理
16.3.1 获取文件属性
16.3.2 监视文件系统变化
16.4 XML文件操作
XML(Extensible Markup Language,可拓展标记语言)是一种简单的、广泛应用于数据交换和数据存储的语言。Qt提供了QXML模块来支持对XML数据的处理。
16.4.1 读取XML文件
16.4.2 写入XML文件
第17章 Qt多线程
GUI应用程序经常使用多个线程:一个线程保持用户界面的相应,其他线程执行耗时冗长的活动,例如读取大型文件并执行复杂的计算。
配置Qt并提供类来表示线程、互斥锁、信号灯、线程全局存储。
Qt提供对线程支持的3种形式:
1)平台无关的线程类
2)线程安全的事件投递
3)跨线程的信号-槽连接、
一些线程相关的类:
17.1 在Qt中创建一个线程
17.2 Qt的同步控制
互斥体(QMutex)、读写锁(QReadWriteLock)、信号量(QSemaphore)和条件变量(QWaitCondition)
17.2.1 QMutex类
17.2.2 QReadWriteLock类
17.2.3 QSemaphore类
17.2.4 QWaitCondition
17.3 使用线程池
使用线程池QThreadPool管理和回收QThread创建的线程对象,从而减少由于线程创建和销毁所带来的资源开销。
每一个Qt应用程序都有一个全局的QThreadPool对象,可以通过函数globalInstance()调用该线程池全局对象。
第18章 Qt数据库编程
18.1 Qt数据库开发基础
18.2 连接数据库
18.2.1 MySQL数据库连接
18.2.2 SQLite数据库连接
18.3 数据库基本操作
18.3.1 添加
18.3.2 浏览查询
18.3.3 删除
18.3.4 修改
18.4 SQLite数据库实例
18.4.1 界面设计
18.4.2 创建绑定数据库
18.4.3 主函数与程序主界面
18.4.4 数据库操作
第19章 Qt网络编程
主要内容包括:使用QHostInfo获取主机的网络信息:使用UDP和TCP两种方式进行聊天;使用QTcpSocket与其他应用程序通过Socket端口进行通信;实现HTTP协议下载;以及建立一个FTP协议客户端。
19.1 获取主机网络信息
19.2 基于UDP和TCP的聊天室
19.2.1 基于UDP的聊天功能
19.2.2 基于TCP的文件传输
19.3 基于Socket的Qt与Flex通信
19.4 HTTP文件下载
19.5 FTP客户端
第20章 Qt绘图
Qt支持2D和3D.Qt的2D图形类支持点阵图形和向量图形,可以加载并保存各种图形格式,并将文本和图形导出为Portable Document Format文件(PDF)。
Qt实际上是与平台无关的OpenGL编程的一个标准GUI框架。
20.1 QPainter绘图
20.1.1 QPen类
绘制线
20.1.2 QBrush类
对封闭图形和绘图设备背景填充着色
20.1.3 QFont类
文字的绘制
20.2 渐变填充绘图
20.3 绘图与绘图设备
绘图设备是指继承QPainterDevice的子类
20.4 坐标系统与坐标变换
20.4.1 坐标系统
20.4.2 坐标系变换
20.4.3 坐标系状态的保存与恢复