第1章 Qt概覽 1
歡迎來到Qt的世界,讓我們看看Qt是什麼,能給我們帶來什麼,又有誰在使用Qt。我們要約會的Qt on Android,它緣起何處,有著怎樣麯摺婉轉的曆史,如今的小模樣能否讓我們愛之如狂……
1.1 什麼是Qt 1
1.2 我們能用Qt做什麼 1
1.3 誰在使用Qt 1
1.4 什麼是Qt on Android 2
1.5 Qt on Android的前世今生 2
第2章 Qt開發環境快速上手 6
當你遇見瞭閤適的人,開始籌劃第一次約會,又是興奮又是惆悵,要不要買花,去哪裏買禮物,穿什麼衣服,灑什麼香水,帶什麼應對意外的小物件,該不該瞭解可能要去的地方環境如何……一切都為瞭順利地完成這事關緊要的第一次。我精心準備瞭Qt入門的一切,微笑著歡迎你的來訪。
2.1 Qt Creator簡介 6
2.2 Qt Creator下載與安裝 7
2.2.1 下載 7
2.2.2 安裝 7
2.3 創建第一個項目:Hello World 9
2.4 Qt Creator集成開發環境介紹 13
2.4.1 歡迎界麵 13
2.4.2 編輯界麵 16
2.4.3 調試界麵 17
2.4.4 項目選項設置 18
2.4.5 菜單簡介 19
2.4.6 Qt Creator的選項配置 21
2.4.7 項目模闆介紹 22
2.5 Qt開發工具介紹 25
2.5.1 Assistant 25
2.5.2 Designer 29
2.5.3 Linguist 30
2.5.4 命令行環境 30
第3章 Qt on Android快速上手 32
風,起於青萍之末,升降於雲際本土,誌高遠而固磐。Qt跨界牽手Android,帶給我們一種新的可能與希冀,這種欣欣然還需落到實處,從準備環境開始,從第一聲Hello開始,學會必要的調試手段,嚮著部署嚮著發布而去……
3.1 開發環境搭建 32
3.1.1 JDK安裝 32
3.1.2 環境變量設置 34
3.1.3 Android SDK安裝 36
3.1.4 Android NDK安裝 41
3.1.5 Apache Ant安裝 41
3.1.6 Qt Creator的Android環境配置 42
3.1.7 AVD創建 44
3.1.8 連接你的手機 46
3.2 Hello Qt on Android 47
3.2.1 創建項目 47
3.2.2 項目選項 50
3.2.3 創建密鑰文件和證書 53
3.2.4 創建AndroidManifest.xml 55
3.2.5 添加代碼 53
3.2.6 運行程序 55
3.3 Qt庫的部署策略 57
3.3.1 Use Ministro service to install Qt 58
3.3.2 Bundle Qt libs in APK 59
3.3.3 Deploy local Qt libraries to temporary directory 60
3.4 日誌 62
3.4.1 為什麼要有日誌 63
3.4.2 在Qt中如何使用日誌 63
3.4.3 如何把日誌輸齣到Android日誌係統中 64
第4章 Qt項目文件介紹 67
有些頂頂重要的,卻總被忽視,pro文件就是那個悲催的備胎啊,滿含深情一路追隨著你,你卻隻在受傷時想起它值得珍惜。噢,沒關係,你看我十八般武藝萬種風情,隻默默地在你身邊佇立,期待著你書到用時迴眸一笑。
4.1 pro文件介紹 67
4.1.1 注釋 68
4.1.2 組件選擇 68
4.1.3 目標文件名 68
4.1.4 模闆 69
4.1.5 指定源文件 69
4.1.6 指定頭文件 70
4.1.7 設置頭文件路徑 70
4.1.8 指定庫與庫文件路徑 70
4.1.9 定義宏 70
4.1.10 配置信息 71
4.1.11 代碼塊與條件測試 72
4.1.12 變量 74
4.2 pro.user文件 75
4.3 pri文件 75
4.4 Makefile 75
第5章 Qt入門 76
我們扔掉瞭紙尿褲,走齣瞭Qt的第一步,興奮地揮舞著小手顛顛兒著跑起來瞭,身邊那些花兒,招呼一聲吧。你好,QWidget;你好,QLabel;你好,QPushButton;你好,親的信號與槽;你好,布局管理器……你看,它們迴應你瞭,仿佛在說,你若安好,便是晴天。
5.1 Hello World再分析 76
5.2 QuitApp:帶交互的小程序 77
5.3 初識信號與槽 79
5.4 構建復雜界麵 80
5.4.1 蓋洛普Q12測評程序 80
5.4.2 創建自己的槽 85
5.4.3 布局管理器介紹 85
5.4.4 控件迴顧 88
5.5 追隨Qt的代碼風格 91
第6章 元對象係統 92
Qt的根基就在元對象係統,唯有修好內功,各種招式方可如臂使指,信手拈來。就讓我們抽絲剝繭,以無刃入有間,看看signals、slots、emit、SLOT、SIGNAL這些Qt的繁花,就讓我們跟著moc走上一遭,就讓我們看看信號如何喚起阿槽,就讓我們練練事件與過濾器的絕招……
6.1 牡丹花示例 93
6.2 再論編譯過程 95
6.3 Q_OBJECT宏 96
6.4 QMetaObject 97
6.5 關鍵字signals、slots、emit、SIGNALS、SLOTS 97
6.5.1 signals 97
6.5.2 emit 98
6.5.3 slots 98
6.5.4 SIGNALS 98
6.5.5 SLOTS 98
6.6 moc的魔法 99
6.6.1 moc_peony.cpp的源碼 99
6.6.2 moc的工作清單 101
6.6.3 信號的真容 101
6.6.4 信號與槽的約會 102
6.7 深入理解信號與槽 107
6.7.1 信號與槽原理 107
6.7.2 如何使用信號與槽 108
6.7.3 信號與槽的連接類型 109
6.7.4 信號與槽經驗談 110
6.7.5 跨綫程使用信號與槽 110
6.8 屬性係統 114
6.8.1 靜態屬性 114
6.8.2 動態(運行時)屬性 117
6.9 事件和事件過濾器 118
6.9.1 重寫event() 119
6.9.2 重寫特定事件處理器 120
6.9.3 事件過濾器 120
6.9.4 自定義事件 122
6.10 定時器事件 124
6.10.1 使用QTimer 125
6.10.2 使用QObject::startTimer 125
6.11 對象樹與生命周期 126
6.12 智能指針 131
6.12.1 QPointer 131
6.12.2 QSharedPointer 132
6.12.3 QWeakPointer 133
6.12.4 QScopedPointer 134
6.12.5 QObjectCleanupHandler 135
6.13 動態類型轉換 136
6.14 國際化 136
6.14.1 字符串國際化方法 137
6.14.2 創建譯本 138
6.14.3 裝載譯文文件 138
6.14.4 運行時改變語言 138
第7章 Qt模闆庫介紹 140
你離不開的,不隻有空氣、網絡、微信、智能手機,還有接納韆言萬語的QString,還有環環相扣的QList,還有你儂我儂的QMap,以及那些胸有韆韆壑可容萬萬對象的容器們。
7.1 使用QString 140
7.1.1 初始化一個字符串 141
7.1.2 操作字符串數據 141
7.1.3 字符串查詢 142
7.1.4 編碼轉換 142
7.1.5 格式化輸齣 143
7.2 容器類 143
7.2.1 QList示例 144
7.2.2 QMap示例 146
第8章 Qt GUI編程 148
阿裏巴巴進入瞭四十大盜的山洞,裏麵都有什麼寶貝呢?單選按鈕復選框,行編輯與分組框,列錶和錶格,文本框攜手選項卡……你總是說,我要更多還要更美,QPainter會給你畫筆,給你顔色,給你想不到的美好。
8.1 智能手機GUI特點 148
8.2 內建窗口控件介紹 149
8.2.1 QRadioButton 149
8.2.2 QCheckBox 150
8.2.3 QGroupBox 150
8.2.4 QLineEdit 152
8.2.5 QTextEdit 153
8.2.6 QTabWidget 154
8.2.7 QListWidget 155
8.2.8 Qt資源文件係統 158
8.2.9 QTableWidget 160
8.3 自定義窗口部件 166
8.3.1 使用QPainter繪圖 166
8.3.2 為Android實現的ImageButton 167
8.3.3 文字漸變標簽 169
第9章 多綫程 174
上路吧,綫程,請引領我們進入並行世界,那騎著單車看夕陽的時代已隻堪懷念。低階的QThread賜予我們強大的控製力,它的事件循環會開啓潘多拉的盒子,跨綫程的通信如此美麗。QThreadPool省卻瞭我們繁重的手工,而QtConcurrent則在高屋建瓴,勢必讓我們使用並發不費吹灰之力。
9.1 上路吧,綫程 174
9.2 綫程自己的事件循環 176
9.3 豈能老死不相往來——綫程間通信 177
9.3.1 跨綫程的信號與槽 177
9.3.2 跨綫程的事件 178
9.3.3 門鈴示例程序 178
9.4 綫程同步 182
9.5 使用QThread的注意事項 184
9.6 QThreadPool 184
9.7 高階多綫程API:QtConcurrent 185
第10章 網絡編程 189
互聯網的蓬勃發展從1995年開始,距今已有將近20年。2008年6月,iPhone 3G發布,開啓移動互聯網新紀元,距今已有7年。網絡已經成為我們感知世界的重要神經元。在Qt的世界裏,QNetworkAccessManager讓網絡連接與訪問變得一緻而簡單,而QTcpSocket與QUdpSocket則為你掃清瞭socket的紛繁復雜,讓你可以優雅地打造你的專屬服務。
10.1 QNetworkAccessManager 189
10.1.1 http編程 190
10.1.2 ftp編程 198
10.2 QTcpSocket/QTcpServer 201
10.2.1 服務器 203
10.2.2 客戶端 205
10.3 QUdpSocket 207
10.3.1 服務器 207
10.3.2 客戶端 209
第11章 文件IO 211
我想要有個傢,一個不需要華麗的地方,在我疲倦的時候我會想到它。在計算機的虛擬世界,那些在內存中運行的應用軟件,它們有一個不變的根,就是文件。原始的文件操作艱澀難懂,而Qt提供的QFile、QTextStream、QDataStream這IO三劍客,化復雜為簡單優雅。
11.1 QFile 211
11.2 QTextStream 214
11.3 QDataStream 215
第12章 XML 217
1998年2月,XML標準正式齣爐,從此我們可以用它對文檔和數據進行結構化處理,各種文件格式方言魚龍混雜浮雲蔽日的時代漸行漸遠。多麼美好的時代,Qt提供瞭DOM、SAX、StAX三種常見的XML處理模式,熱情地支持我們說同一種語言。
12.1 XML讀取與解析 217
12.1.1 DOM 218
12.1.2 SAX 219
12.1.3 StAX 223
12.2 XML文檔生成與保存 226
12.2.1 QXmlStreamWriter 226
12.2.2 QDomNode::save() 227
12.2.3 瘋狂原始人的方式 228
第13章 Qt on Android揭秘 229
也許你已經尋尋覓覓尋不到,Qt on Android的訊息。其實我一直在燈火闌珊處等你,現在就讓我們點燃火把,做一迴武陵捕魚人,去尋桃花源。我們不僅要親曆Qt on Android應用的誕生過程,還要陪著它穿越JNI的逼仄入口,來到豁然開朗、美池桑竹各有其屬的Qt王國。
13.1 APK是怎樣煉成的 229
13.1.1 當你“運行”時 230
13.1.2 Android項目目錄結構 232
13.1.3 string.xml介紹 233
13.1.4 AndroidManifest.xml介紹 233
13.1.5 libs.xml介紹 238
13.1.6 Androiddeployqt.exe都乾瞭什麼 239
13.2 Java與Qt的結閤過程 242
13.2.1 應用入口 242
13.2.2 通信代理 245
13.2.3 QPA插件 248
13.3 Qt應用的狀態 252
第14章 Android移動開發主題 253
江湖之遠,廟堂之高,各有其運行規則。移動開發這片新天地,讓我們不得不重新審視自己:怎麼處理BACK鍵,如何迴應縴縴玉指多情的觸摸,怎樣在傳感器的迷宮中穿梭,麵對拍照的需求能否響應,在水一方的伊人想玉笛暗飛聲我們要不要十二萬分熱情地支持……
14.1 按鍵處理 253
14.1.1 重寫keyPressEvent/keyReleaseEvent 254
14.1.2 給子控件安裝事件過濾器 255
14.1.3 應用級彆的事件過濾器 256
14.2 觸摸與手勢 258
14.2.1 觸摸 258
14.2.2 手勢 263
14.3 傳感器與手勢 264
14.3.1 常見傳感器介紹 264
14.3.2 Qt傳感器手勢類庫介紹 268
14.3.3 搖動手勢 268
14.3.4 覆蓋手勢 269
14.3.5 自由落體 269
14.3.6 纏繞手勢 269
14.3.7 翻轉手勢 269
14.3.8 扇動手勢 270
14.3.9 傳感器手勢的使用 270
14.4 拍照 271
14.4.1 QCamera和它的小夥伴 271
14.4.2 QCameraViewFinder 273
14.4.3 QCameraImageCapture 273
14.4.4 使用相機拍照 274
14.4.5 在QML應用中使用相機 277
14.5 錄音與迴放 278
14.5.1 錄音類庫 278
14.5.2 播放類庫 279
14.5.3 錄音與迴放小示例 279
第15章 使用JNI擴展你的應用 286
Qt強則強矣,雅則雅矣,畢竟也有力不能及之時,所謂天長地久有時盡,不應有恨月常圓。Qt為Android準備瞭QAndoidJniObject和QAndroidJniEnviroment兩枚神器,藉助它們,你就可以提升你的念力,請來Android平颱的諸位神仙樣人物幫你完成看似不可能的任務。
15.1 使用JNI Environment 286
15.2 調用Java代碼 287
15.2.1 Java方法簽名 288
15.2.2 調用Java方法 289
15.2.3 extendsQtWithJava實例 291
15.2.4 QtAndroid名字空間 298
15.2.5 使用手機外部存儲 298
15.3 Java調用C++ 299
第16章 紙上得來終覺淺,絕知此事要躬行 305
曆15章之漫長,終於可以攜劍下天山,就讓我們紅塵作伴,活得瀟瀟灑灑,策馬奔騰,共享人世繁華。音樂,圖片,筆記,拍照與美圖,天氣,查IP剖Json,這些,所有這些應用的齣生與成長,我們將共同經曆,一路上有你,苦一點也願意……
16.1 筆記qnotepad 306
16.1.1 首頁設計與實現 308
16.1.2 筆記對象 316
16.1.3 筆記瀏覽與編輯 318
16.2 圖片瀏覽器 324
16.2.1 文件選擇控件 324
16.2.2 圖片加載器 335
16.2.3 圖片顯示 344
16.3 IP地址查詢 351
16.3.1 Json數據格式簡介 352
16.3.2 Qt中的Json類庫 352
16.3.3 程序詳解 353
16.4 音樂播放器 358
16.4.1 雲想衣裳花想容——Qt樣式錶 359
16.4.2 多媒體類庫介紹 361
16.4.3 音樂播放器詳解 362
16.5 天氣預報 380
16.5.1 雲中誰寄錦書來——GPS定位 382
16.5.2 天氣查詢與顯示 387
16.6 拍照與後期處理 396
16.6.1 方寸天地納繾綣,楚楚蘊秀薄紙間 398
16.6.2 圖像處理算法 401
16.6.3 圖片加載與顯示 410
16.6.4 組織部長 413
附錄A 常見問題 420
參考文獻 427
· · · · · · (
收起)