精通Qt4編程(第2版)

《精通Qt4編程(第2版)》是2011年電子工業出版社出版的圖書,作者是蔡志明、盧傳富、李立夏等。

基本信息

圖書信息

精通Qt4編程(第2版)精通Qt4編程(第2版)
書名:精通Qt4編程(第2版) 作者:蔡志明 盧傳富 李立夏 等編著

ISBN 978-7-121-12525-6

出版日期:2011年2月

定價:89.00元

宣傳語

暢銷書升級版

諸多大型項目工程開發經驗的凝聚之作

內容簡介

本書詳細介紹了Qt的基礎知識和GUI編程套用,舉例翔實,內容全面,基本涵蓋了Qt編程的各個方面。全書共分3篇25章,包括Qt GUI編程的基礎知識(對話框、基礎視窗部件、程式主視窗、布局管理)、中級編程(2D繪圖、拖放操作與剪貼簿、檔案處理、網路編程、多執行緒、事件機制、資料庫及Qt風格)和高級套用(XML套用、模型/視圖結構、高級繪圖、進程間通信、Qt外掛程式和腳本套用、多媒體、瀏覽器、動畫及狀態機等)。同時,在相關章節也穿插了一些重要的知識點,包括元對象系統、屬性系統、對象樹機制、信號/槽機制等。

本書體系完整,內容實用,可以作為Qt初學者的入門進階書籍,適合具有一定開發經驗的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

相關詞條

相關搜尋

熱門詞條

聯絡我們