本文主要是通過一本書來大致了解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 坐標系狀態的保存與恢復
