圖書基本信息
書名:精通Qt4編程(第2版)
定價:89.00元
宣傳語
暢銷書升級版
諸多大型項目工程開發經驗的凝聚之作
內 容 簡 介
全書共分3篇25章,包括Qt GUI編程的基礎知識(對話框、基礎視窗部件、程式主視窗、布局管理)、中級編程(2D繪圖、拖放操作與剪貼簿、檔案處理、網路編程、多執行緒、事件機制、資料庫及Qt風格)和高級套用(XML套用、模型/視圖結構、高級繪圖、進程間通信、Qt外掛程式和腳本套用、多媒體、瀏覽器、動畫及狀態機等)。同時,在相關章節也穿插了一些重要的知識點,包括元對象系統、屬性系統、對象樹機制、信號/槽機制等。
前 言
本書第1版出版已近三年了,其間Qt也發生了較大的變化。最重要的就是Trolltech公司被Nokia收購,由此改變了Qt發展的趨勢。Qt走向了更為開放,功能更豐富,支持的平台更多的道路。
Qt新特點
歸納起來有以下幾點:
1.支持LGPL(GNU Lesser General Public License)協定。
我們知道,當一個自由軟體使用GPL聲明時,該軟體的使用者有權重新發布、修改該軟體,並得到該軟體的原始碼;但只要使用者在其程式中使用了該自由軟體,或者是使用修改後的軟體,那么使用者的程式也必須公布其原始碼,同時允許別人發布、修改。也就是說,使用GPL聲明下的自由軟體開發出來的新軟體也一定是自由軟體。LGPL是GPL的變種,與 GPL的最大不同是,可以私有使用LGPL授權的自由軟體,開發出來的新軟體可以是私有的而不需要是自由軟體。Qt支持LGPL協定後,用戶使用開源版Qt獲得了更大的自由度。
2.開放了Qt原始碼庫,並鼓勵社區參與。
以前Qt雖是開原始碼,但源碼庫並未開放,現在在可以自由地訪問Qt源碼庫,並可以為Qt做出自己的貢獻。Qt的源碼庫使用分散式版本控制系統Git管理,也可以通過瀏覽器瀏覽。這裡有Qt,Qt Creator,Qt Jambi等多個項目等著您的參與!開放原始碼庫,拉近了Qt開發者與用戶之間的距離。
3.徹底開放了原來商業平台的代碼。
原來只能在商業版中使用的ActiveQt,Oracle資料庫驅動等,現在都能在開源版中使用。開源版和商業版不再是兩個源碼不同的版本,只是遵守的協定不同而已。開源版用戶終於能享受全功能Qt了。同時在Windows平台上也開放了Visual Studio外掛程式和相應支持,開源版用戶在Windows上除使用MinGW開發外又多了一項選擇,使用Visual Studio開發Qt套用。
4.對嵌入式平台支持力度加大。
Qt除了繼續支持嵌入式Linux平台外,增加了對Windows CE,Symbian,Maemo 5等嵌入式平台的支持。與此同時,推出了Qt Mobility軟體包,對手機上的GPS設備、多媒體、簡訊、電話等功能提供了較完善的支持,讓用戶開發手機套用更為便利。同時Qt還對實時作業系統VxWorks和QNX提供了社區支持,為平淡無奇的嵌入式圖形系統打了一劑強心針。
5.最後就是不斷添加到Qt軟體包中的功能,並行計算框架、動畫框架、狀態機框架、多媒體框架等幾個框架為Qt增色不少。
瀏覽器、XQuery、XPATH、XSLT、多點觸摸、圖形效果支持提升了Qt的能力。當然還有其他功能和性能改進不能一一列出,這都使得Qt 4走向了成熟。Qt 4.7中更是引入了類似於Windows ZAML的聲明式UI編程的功能,該功能命名為Qt Quick。
總之,在幾年前,我們還需要向周圍的人介紹什麼是Qt,如今只需要對如何更好地套用Qt進行交流。在國內圖書市場上,也出現了為數不少Qt相關的書籍。為了與時俱進,本書也根據新版的Qt 4.7 進行了修改,推出了第2版,但本版中不包括Qt Quick編程介紹。
本書的結構
本書共25章,每章討論一個專題。章節安排上基本採用循序漸進、由淺到深的原則。但最後的高級篇中的章節沒有很強的關聯,可以按照隨意的順序閱讀。每章內容及作者分述如下:
篇章 章 名 作者 內 容 簡 介 頁碼
初級篇 第1章 Qt初步實踐 盧傳富 建立了第一個較簡單的Qt應用程式,在GUI用戶界面中顯示一行中文 2
第2章 對話框
——QDialog 盧傳富 介紹了Qt的對話框類QDialog,實現了一個自定義的登錄對話框,舉例說明了Qt提供的內建對話框類的套用 14
第3章 基礎視窗部件——QWidget 盧傳富
蔡志明 首次引入Qt設計器的使用,繪製並實現了一個查找檔案功能的部件,介紹了Qt應用程式中使用ui檔案的基本方法以及Qt樣式表;較深入地分析了Qt對象模型的一些基本知識,涉及信號和槽機制、Qt元對象系統、屬性系統和對象樹機制,以及部件類型和部件的幾何布局等內容 36
第4章 程式主視窗
—— QMainWindow 盧傳富 Qt應用程式的主視窗是由多個部件/組件構成的框架,本章通過一個簡單文本編輯器的例子,介紹了主視窗的選單、工具條、中心部件、錨接部件和狀態條,並通過Qt設計器繪製和手寫代碼兩種方法實現了簡單文本編輯器主視窗界面的排布和管理 87
第5章 布局管理 盧傳富 布局管理是GUI應用程式編程的一個重要方面。Qt提供了多種布局管理部件,包括Qt布局管理器、分裂器、棧部件、工作空間部件和多文檔區部件等。本章一一介紹了這些部件,並舉例說明了它們在圖形用戶界面編程中的套用 124
中級篇 第6章 2D繪圖 蔡志明 本章內容較多,包括Qt的繪圖要素、圖形變換與坐標系統、繪圖設備、圖像處理、圖像列印等 158
第7章 Graphics View框架 蔡志明 講解Qt圖形系統的模型視圖框架——Graphics View框架。包括體系結構、坐標系統、編程方法和圖形列印 211
第8章 拖放操作和剪貼簿 蔡志明 本章簡要地說明了基於MIME的拖放操作和剪貼簿的使用,關於Graphics View框架的拖放操作也在本章 225
第9章 檔案處理 蔡志明 介紹了Qt的檔案處理,包括基於流的文本檔案和二進制檔案處理,檔案信息和目錄操作,目錄以及檔案的變化監控,檔案引擎的編寫 232
續表
篇章 章 名 作者 內 容 簡 介 頁碼
中級篇 第10章 網路 李立夏 介紹了Qt的網路處理,包括編寫常見的FTP、HTTP、UDP和TCP程式,以及訪問底層網路接口信息和擴展Qt網路模組功能的方法 241
第11章 多執行緒 李立夏 介紹了Qt的多執行緒處理,包括兩方面內容:傳統的執行緒操作,以及與Qt事件機制相關的操作。這一章還涉及較多的基本概念,並逐一做了介紹 278
第12章 事件處理 李立夏 介紹了Qt的事件處理模型,詳細介紹了在Qt程式設計中處理事件的五種方法,並討論了如何利用Qt事件機制加快用戶界面回響速度 308
第13章 資料庫 李立夏 介紹了Qt的資料庫處理,重點介紹了如何在Qt中使用SQL語句進行資料庫操作和如何利用QSqlTableModel這類高層次類進行常見的資料庫編程 323
高級篇 第14章 界面風格 王燕琴
蔡志明 講解了Qt的風格原理,從簡單到複雜套用Qt自定義風格。Qt的樣式表的原理和套用 354
第15章 XML 蔡志明 對Qt的三種XML解析方式(DOM、SAX和基於流的解析)進行了比較和舉例。還講解了如何使用API寫XML檔案。XMLPatterns模組的套用,包括XSLT、XQuery、XML模式 413
第16章 模型/視圖結構 蔡志明 闡述了Qt的模型/視圖結構,分別對模型視圖的三個組成部分(模型、視圖和代理)進行了介紹,演示了如何自定義這些組成部分,並簡要說明了拖放以及選中操作 443
第17章 高級繪圖 蔡志明 敘述了在Qt中如何使用OpenGL繪圖,對基本的OpenGL繪圖進行了講解,介紹了矢量圖型檔案SVG的讀寫操作 486
第18章 進程與進程間通信 李立夏 介紹進程和進程間通信的知識,重點介紹了Qt中桌面環境下基於D-Bus的多進程應用程式開發 502
第19章 Qt外掛程式 蔡志明 說明了Qt的外掛程式系統,並對Qt Designer外掛程式、資料庫外掛程式、風格外掛程式進行了較詳細的介紹 528
第20章 腳本——QtScript 蔡志明 這是Qt 4.3中引入的最新內容,使得Qt能夠支持ECMAScript腳本。本章簡要地舉例說明了在Qt中如何使用腳本,如何將C++對象暴露給腳本 546
第21章 國際化 駱艷 本章包括編碼的處理,Qt Linguist的使用步驟,動態語言切換的內容 557
第22章 Qt單元測試框架 蔡志明 本章闡述了如何使用QTestLib框架進行數據測試、GUI測試和性能測試 568
第23章 動畫與狀態機框架 蔡志明 簡要介紹了動畫與狀態機框架,並結合兩個框架的套用實例進行了講解 576
第24章 WebKit與多媒體 蔡志明 介紹了瀏覽器和Phonon多媒體框架,給出了Phonon多媒體播放實例的實現過程 595
第25章 嵌入式Qt 蔡志明 簡要地講解了在Window Mobile和嵌入式Linux上開發嵌入式圖形套用的方法,還給出了嵌入式Qt裁剪的方法 607
附錄A~D 蔡志明 附錄中包括Qt在Linux、Windows上的安裝,VS2008、Eclipse、Qt Creator集成開發環境的使用,qmake的基本套用,Qt資源 619
如何獲取原始碼
由於Qt是跨平台的,因此書中的內容套用能夠在Windows、Linux、UNIX和Mac OS上運行,書中的程式可能在下列平台之一上編寫:Windows XP/Vista、Linux(OpenSuSE、Fedora Core等)。因此書中的螢幕截圖可能來源於其中的任何一種作業系統。
要獲取本書的原始碼,可以訪問博文視點資訊有限公司網站獲取:
致謝
與電子工業出版社孫學瑛編輯是第二次合作了,孫編輯對本書的關心和認真細緻的工作,使本書能夠及時出版,再次表示誠摯的謝意。
蔡志明 盧傳富 李立夏
2010年9月30日於武漢
目 錄
初 級 篇
第1章 Qt初步實踐 2
1.1 第一個Qt程式 2
1.1.1 建立主程式 2
1.1.2 建立工程 3
1.1.3 編譯/運行第一個Qt應用程式 8
1.1.4 第一個Qt程式的代碼分析 9
1.2 使用Qt布局管理器 11
1.3 關聯操作 12
1.4 小結 13
第2章 對話框—— QDialog 14
2.1 自定義對話框 14
2.1.1 建立新類 14
2.1.2 添加子視窗部件 16
2.2 加入主程式 22
2.3 Qt內建(built-in)對話框 25
2.4 小結 35
第3章 基礎視窗部件—— QWidget 36
3.1 Qt設計器繪製視窗部件 36
3.1.1 Qt設計器基礎 36
3.1.2 繪製視窗部件 41
3.2 程式中引入自定義視窗部件 49
3.2.1 直接使用方式 49
3.2.2 單一繼承方式 51
3.2.3 多繼承方式 54
3.3 Qt的信號和槽機制 55
3.3.1 基本原理 55
3.3.2 設計信號和槽 58
3.3.3 信號和槽的自動關聯 66
3.4 視窗標誌及幾何布局 66
3.4.1 視窗標誌 67
3.4.2 視窗部件的幾何布局 69
3.5 Qt對象模型 77
3.5.1 元對象系統 78
3.5.2 屬性系統 79
3.5.3 對象樹 82
3.6 隱式共享 85
3.7 小結 86
第4章 程式主視窗——QMainWindow 87
4.1 QMainWindow主視窗框架 87
4.2 Qt設計器繪製主視窗 88
4.2.1 選單 91
4.2.2 工具列 94
4.2.3 中心部件 97
4.3 代碼創建主視窗 99
4.3.1 創建資源檔案 99
4.3.2 定義主視窗類 99
4.4 錨接部件 104
4.5 狀態欄 107
4.6 實現文本編輯器功能 109
4.7 多文檔 120
4.8 列印文檔 122
4.9 小結 123
第5章 布局管理 124
5.1 Qt布局管理器——QLayout 124
5.1.1 Qt布局管理器簡介 124
5.1.2 布局管理器及視窗部件大小
策略的套用 128
5.2 分裂器部件QSplitter 137
5.3 棧部件QStackedWidget 138
5.4 工作空間部件QWorkspace 139
5.5 多文檔區部件QMdiArea 153
5.6 小結 155
中 級 篇
第6章 2D繪圖 158
6.1 Arthur繪圖基礎 158
6.1.1 繪圖 158
6.1.2 繪圖設備 182
6.2 坐標系統與坐標變換 183
6.2.1 坐標系統 183
6.2.2 坐標變換 183
6.3 用不同的字型 184
6.4 繪圖路徑——QPainterPath 188
6.5 QImage與QPixmap繪圖設備 190
6.5.1 QImage 190
6.5.2 Pixmap 192
6.6 組合模式繪圖 201
6.7 小結 210
第7章 Graphics View框架 211
7.1 Graphics View概述 211
7.1.1 Graphics View體系結構 211
7.1.2 Graphics View坐標系統 212
7.1.3 深入Graphics View 213
7.2 圖形效果 221
7.3 圖形圖像列印 222
7.3.1 普通列印過程 222
7.3.2 特殊視窗部件的列印 223
7.4 小結 224
第8章 拖放操作和剪貼簿 225
8.1 拖放操作 225
8.1.1 拖放操作 225
8.1.2 定義新的拖放操作類型 228
8.1.3 Graphics View框架下的拖放操作 228
8.2 使用剪貼簿 230
8.3 小結 231
第9章 檔案處理 232
9.1 讀寫文本檔案 232
9.2 操作二進制檔案 234
9.3 臨時檔案 236
9.4 目錄操作和檔案管理 236
9.4.1 目錄操作 236
9.4.2 檔案管理 238
9.5 監視檔案系統變化 238
9.6 檔案引擎 240
9.7 小結 240
第10章 網路 241
10.1 FTP客戶端 241
10.2 HTTP客戶端 250
10.3 UDP套用 254
10.4 TCP套用 258
10.5 高級套用 269
10.5.1 底層操作 269
10.5.2 使用代理 272
10.5.3 擴展Qt網路功能 272
10.5.4 效率問題 276
10.6 小結 277
第11章 多執行緒 278
11.1 啟動一個執行緒 278
11.2 執行緒互斥與同步 282
11.2.1 臨界區問題 282
11.2.2 使用QMutex 283
11.2.3 使用QSemaphore 284
11.2.4 使用QWaitConditon 286
11.3 執行緒的其他問題 289
11.3.1 優先權問題 289
11.3.2 死鎖及優先權反轉問題 292
11.3.3 本地存儲問題 294
11.4 Qt的執行緒機制 295
11.4.1 可重入與執行緒安全 295
11.4.2 執行緒與事件循環 296
11.4.3 執行緒與信號/槽機制 297
11.4.4 多執行緒網路示例 298
11.5 並行計算 302
11.5.1 利用QtConcurrent啟動執行緒 302
11.5.2 圖片瀏覽器示例 303
11.6 小結 307
第12章 事件處理 308
12.1 事件機制 308
12.1.1 事件來源與類型 308
12.1.2 事件處理方法 309
12.2 事件處理器 310
12.3 事件過濾器 315
12.4 加快用戶界面回響 318
12.4.1 使用processEvents()函式 318
12.4.2 使用定時器 320
12.5 小結 322
第13章 資料庫 323
13.1 連線資料庫 323
13.2 常用資料庫操作 328
13.2.1 使用SQL語句 328
13.2.2 事務操作 330
13.2.3 使用SQL模型類 331
13.2.4 數據表示 335
13.3 Qt資料庫套用 337
13.3.1 使用嵌入式資料庫 337
13.3.2 使用Oracle資料庫 340
13.4 小結 352
高 級 篇
第14章 界面風格 354
14.1 使用Qt風格 354
14.2 簡單自定義風格 355
14.2.1 界面設計 355
14.2.2 自定義界面外觀 356
14.2.3 換膚 372
14.3 Qt風格原理 376
14.3.1 風格元素 377
14.3.2 風格選項 381
14.3.3 風格函式 383
14.3.4 風格調色板 384
14.3.5 風格繪製過程 386
14.4 高級自定義風格 390
14.5 Qt樣式表 407
14.5.1 樣式表語法 407
14.5.2 樣式表的套用 409
14.6 小結 412
第15章 XML 413
15.1 DOM 413
15.1.1 DOM入門 413
15.1.2 使用DOM 414
15.1.3 使用DOM寫XML檔案 417
15.2 SAX 420
15.3 基於流的XML API 425
15.4 QtXmlPatterns模組 431
15.4.1 XSLT 431
15.4.2 XQuery 433
15.4.3 XML Schema 437
15.5 小結 442
第16章 模型/視圖結構 443
16.1 模型/視圖結構與MVC設計模式 443
16.1.1 模型 444
16.1.2 視圖 444
16.1.3 代理 445
16.2 使用已有的模型視圖類 445
16.2.1 使用已有的模型和視圖類 445
16.2.2 QListWidget、QTreeWidget和QTableWidget 447
16.3 模型(Models) 459
16.3.1 模型索引 459
16.3.2 模型角色 460
16.3.3 自定義模型 461
16.3.4 代理模型 464
16.4 視圖(Views) 469
16.4.1 自定義視圖 469
16.4.2 數據-視窗部件映射 469
16.5 代理(Delegates) 475
16.5.1 使用已有的代理 475
16.5.2 自定義代理 475
16.6 拖放與選中 481
16.6.1 拖放操作 481
16.6.2 選中模式 484
16.7 小結 485
第17章 高級繪圖 486
17.1 3D繪圖——使用OpenGL 486
17.1.1 創建OpenGL視窗 486
17.1.2 著色 490
17.1.3 3D和旋轉 491
17.1.4 紋理貼圖 495
17.2 SVG 498
17.2.1 繪製SVG圖形 498
17.2.2 生成SVG檔案 500
17.3 小結 501
第18章 進程與進程間通信 502
18.1 使用QProcess 502
18.2 Linux進程間通信 505
18.3 共享記憶體與本地Socket 506
18.4 新型進程間通信——D-Bus 512
18.4.1 D-Bus簡介 513
18.4.2 接口與適配器 514
18.4.3 QtDBus套用實例 517
18.5 小結 527
第19章 Qt外掛程式 528
19.1 Qt外掛程式開發基礎 528
19.2 Qt設計器外掛程式 529
19.2.1 使用Scratchpad 529
19.2.2 提升自定義視窗部件 530
19.2.3 Qt設計器外掛程式開發 531
19.3 編寫資料庫外掛程式 538
19.4 自定義風格外掛程式 542
19.5 小結 545
第20章 腳本——QtScript 546
20.1 執行ECMAScript腳本 546
20.2 QtScript中的信號和槽 547
20.3 使用JavaScript操作Qt對象 550
20.4 基於Prototype的繼承 554
20.5 QtScript調試器 555
20.6 小結 556
第21章 國際化 557
21.1 Unicode與字元編碼 557
21.1.1 Unicode 557
21.1.2 漢字編碼 558
21.1.3 編碼轉換 558
21.2 Qt Linguist 561
21.2.1 發布管理器 561
21.2.2 翻譯器 563
21.2.3 載入翻譯檔案 566
21.3 語言切換 566
21.4 小結 567
第22章 Qt單元測試框架 568
22.1 QTestLib框架 568
22.1.1 QTestLib 568
22.1.2 第一個Qt單元測試 569
22.2 數據驅動測試 570
22.3 GUI測試 572
22.3.1 仿真GUI事件 572
22.3.2 重放GUI事件 573
22.4 基準測試 574
22.5 小結 575
第23章 動畫與狀態機框架 576
23.1 動畫框架 576
23.2 狀態機框架 578
23.3 實例分析 582
23.4 小結 594
第24章 WebKit與多媒體 595
24.1 WebKit 595
24.1.1 基於WebKit的瀏覽器 595
24.1.2 添加OpenSSL支持 596
24.1.3 Qt WebKit編程 597
24.2 Phonon多媒體框架 597
24.2.1 Phonon體系結構 597
24.2.2 Phonon媒體播放器 600
24.3 小結 606
第25章 嵌入式Qt 607
25.1 Windows Mobile平台 607
25.1.1 Windows Mobile平台Qt套用開發流程 607
25.1.2 部署Qt應用程式 611
25.1.3 使用行動電話仿真器 613
25.2 嵌入式Linux平台 614
25.2.1 嵌入式Linux平台Qt體系結構 614
25.2.2 開發環境配置 616
25.3 嵌入式Qt的裁剪 618
25.4 小結 618
附錄A Qt安裝 619
附錄B Qt集成開發環境 624
附錄C qmake速查 631
附錄D Qt資源 636