Qt 是軟件開發領域中非常著名的C++可視化開發平臺。本書以Qt 5.15 為平臺,系統介紹Qt 5 的各種功能,在此基礎上配套各種實例,然后綜合應用各種功能開發綜合應用實例。全書分為以下5 部分。第1 部分為Qt 5 基礎(第1~11 章),內容包括Qt 概述,模板庫、工具類及控件,布局管理,基本對話框及實例,主窗口及實例,事件處理及實例,繪圖及實例,文件、目錄與數據庫操作,模型/視圖及實例,網絡通信及實例,定時器、線程和DLL 庫。第2 部分為綜合應用實例(第12~15 章),內容包括圖元、鼠標事件、序列化、工具欄綜合應用實例(我的繪圖板),MDI、文件目錄、樹、Python綜合應用實例(文檔分析器),網絡通信、SQLite、圖元系統、實時語音綜合應用實例(簡版微信),多媒體、線程、視頻圖元、MySQL 綜合應用實例(簡版抖音)。第3 部分為Qt 5.15 和OpenCV 綜合應用(第16~18 章),內容包括Qt 5.15+OpenCV(含Contrib)-4.6.0 環境搭建,OpenCV 圖片處理及實例,OpenCV、樹控件、表格控件綜合應用實例(醫院遠程診斷系統)。第4 部分為QML 編程基礎、QML 動畫特效和Qt Quick Controls 開發基礎(第19~21 章)。第5 部分為網絡資源文件和文檔(可免費下載),包括本書所有實例和綜合應用實例的工程文件、21 個PPT 教學培訓課件、57 個實例開發教學視頻文件、電子商城系統綜合實例文檔、MyWord 字處理軟件綜合實例文檔,Qt 5 操作Office 實例文檔等。附錄A 為Qt 5 簡單調試。本書既可作為Qt 5 開發人員的學習和參考用書,也可作為高等院校相關專業教材或Qt 5 培訓用書。
鄭阿奇,副教授,曾任教于南京師范大學。先后主編出版計算機教材和圖書超過100本,受到市場廣泛好評。出版的教材曾獲得高等教育國家“十一五”規劃教材、高等職業教育“十二五”國家規劃教材、高等職業教育“十三五”國家規劃教材、江蘇省高等職業教育“十四五”規劃教材、江蘇省教學成果二等獎、高等職業教育優秀教材一等獎等榮譽。
第1 章 Qt 概述·······································································································.1
1.1 什么是Qt···································································································.1
1.1.1 Qt 的產生和發展···················································································.1
1.1.2 Qt 5.15 與Qt 6 ······················································································.2
1.2 Qt 5.15 的安裝····························································································.2
1.2.1 下載Qt 在線安裝器和申請免費賬號··························································.2
1.2.2 安裝過程·····························································································.4
1.2.3 運行Qt Creator ·····················································································.7
1.2.4 Qt 5.15 開發環境···················································································.8
1.3 Qt 5.15 開發入門實例·················································································.9
1.3.1 設計器Qt Designer 開發實例··································································.10
1.3.2 直接代碼開發實例···············································································.19
第2 章 模板庫、工具類及控件··············································································.24
2.1 字符串類··································································································.24
2.1.1 操作字符串························································································.24
2.1.2 查詢字符串數據··················································································.25
2.1.3 字符串的轉換·····················································································.26
2.2 容器類·····································································································.27
2.2.1 QList、QLinkedList 和QVector ·······························································.28
2.2.2 QMap 和QHash ··················································································.33
2.3 QVariant ···································································································.36
2.4 算法及正則表達式····················································································.38
2.4.1 常用算法···························································································.38
2.4.2 基本的正則表達式···············································································.39
2.5 控件·········································································································.40
2.5.1 按鈕組(Buttons) ··············································································.40
2.5.2 輸入部件組(Input Widgets)·································································.42
2.5.3 顯示控件組(Display Widgets)······························································.43
2.5.4 空間間隔組(Spacers) ········································································.44
2.5.5 布局管理組(Layouts) ········································································.44
2.5.6 容器組(Containers)···········································································.44
2.5.7 項目視圖組(Item Views) ····································································.46
2.5.8 項目控件組(Item Widgets)··································································.48
2.5.9 多控件實例························································································.52
第3 章 布局管理···································································································.56
3.1 分割窗口類:QSplitter··············································································.56
3.2 停靠窗口類:QDockWidget ······································································.58
3.3 堆棧窗體類:QStackedWidget ···································································.60
3.4 基本布局類:QLayout ··············································································.62
3.5 布局管理綜合實例····················································································.67
第4 章 基本對話框及實例·····················································································.78
4.1 標準文件對話框類····················································································.81
4.1.1 函數說明···························································································.81
4.1.2 創建步驟···························································································.82
4.2 標準顏色對話框類····················································································.83
4.2.1 函數說明···························································································.83
4.2.2 創建步驟···························································································.83
4.3 標準字體對話框類····················································································.84
4.3.1 函數說明···························································································.84
4.3.2 創建步驟···························································································.84
4.4 標準輸入對話框類····················································································.85
4.4.1 標準字符串輸入對話框·········································································.88
4.4.2 標準條目選擇對話框············································································.89
4.4.3 標準int 類型輸入對話框·······································································.89
4.4.4 標準double 類型輸入對話框··································································.90
4.5 消息對話框類···························································································.91
4.5.1 Question 消息對話框············································································.93
4.5.2 Information 消息對話框·········································································.94
4.5.3 Warning 消息對話框·············································································.95
4.5.4 Critical 消息對話框··············································································.95
4.5.5 About 消息對話框···············································································.96
4.5.6 About Qt 消息對話框············································································.96
4.6 自定義消息對話框····················································································.97
4.7 工具盒類··································································································.98
4.8 進度條····································································································.102
4.9 調色板與電子鐘······················································································.106
4.9.1 QPalette ····························································································106
4.9.2 QTime ·····························································································.111
4.9.3 電子鐘實例·······················································································.112
4.10 可擴展對話框························································································.115
4.11 不規則窗體····························································································.118
4.12 程序啟動畫面類:QSplashScreen····························································.120
第5 章 主窗口及實例···························································································.123
5.1 主窗口構成·····························································································.123
5.1.1 基本元素··························································································.123
5.1.2 文本編輯器項目框架···········································································.124
5.1.3 菜單與工具欄的實現···········································································.127
5.2 文件操作功能··························································································.131
5.2.1 新建文件··························································································.131
5.2.2 打開文件··························································································.132
5.2.3 打印文件··························································································.134
5.3 圖像坐標變換··························································································.137
5.3.1 縮放功能··························································································.137
5.3.2 旋轉功能··························································································.138
5.3.3 鏡像功能··························································································.140
5.4 文本編輯功能··························································································.141
5.4.1 設置字體··························································································.143
5.4.2 設置字號··························································································.144
5.4.3 設置文字加粗····················································································.144
5.4.4 設置文字斜體····················································································.145
5.4.5 設置文字加下畫線··············································································.145
5.4.6 設置文字顏色····················································································.145
5.4.7 設置字符格式····················································································.146
5.5 排版功能·································································································.146
5.5.1 實現段落對齊····················································································.147
5.5.2 實現文本排序····················································································.148
第6 章 事件處理及實例·······················································································.151
6.1 鼠標事件·································································································.151
6.2 鍵盤事件·································································································.153
6.3 事件過濾器·····························································································.159
第7 章 繪圖及實例······························································································.164
7.1 基礎圖形的繪制······················································································.164
7.1.1 繪圖基礎類·······················································································.164
7.1.2 QPainter 繪圖框架實例········································································.174
7.1.3 繪制實時時鐘實例··············································································.187
7.2 GraphicsView 繪圖···················································································.190
7.2.1 視圖、場景、圖元的概念·····································································.190
7.2.2 GraphicsView 坐標系統········································································.192
7.2.3 飛舞的蝴蝶實例·················································································.193
7.3 二維圖表繪制··························································································.196
7.3.1 QtCharts 基礎····················································································.196
7.3.2 繪制螺旋曲線實例··············································································.198
7.3.3 繪制柱狀/折線圖實例··········································································.201
7.3.4 繪制餅狀圖實例·················································································.203
7.4 三維繪圖·································································································.205
7.4.1 QtDataVisualization 基礎······································································.205
7.4.2 三維繪圖實例····················································································.207
第8 章 文件、目錄與數據庫操作·········································································.210
8.1 文件操作·································································································.210
8.1.1 文本文件操作實例··············································································.210
8.1.2 二進制文件操作實例···········································································.213
8.2 目錄操作·································································································.215
8.2.1 文件大小及路徑獲取實例·····································································.215
8.2.2 文件系統瀏覽實例··············································································.217
8.2.3 獲取文件信息實例··············································································.220
8.3 數據庫操作·····························································································.224
8.3.1 數據庫與SQL 基礎············································································.224
8.3.2 QtSql································································································231
8.3.3 操作SQLite 實例···············································································.233
8.3.4 操作MySQL 實例··············································································.237
8.3.5 操作SQL Server 實例··········································································.243
第9 章 模型/視圖及實例······················································································.248
9.1 模型/視圖架構·························································································.248
9.1.1 基本概念··························································································.248
9.1.2 實現類·····························································································.249
9.2 常用模型/視圖組件實例···········································································.250
9.2.1 表格模型/視圖及實例··········································································.250
9.2.2 樹狀模型/視圖及實例··········································································.253
9.2.3 文件目錄瀏覽器實例···········································································.256
9.2.4 自定義模型實例·················································································.258
9.3 代理及應用實例······················································································.262
9.3.1 代理概念及開發步驟···········································································.262
9.3.2 代理應用實例····················································································.264
9.4 綜合實例:汽車信息管理系統·································································.271
9.4.1 開發前的準備····················································································.272
9.4.2 開發視圖界面····················································································.273
9.4.3 連接數據庫·······················································································.276
9.4.4 開發主/從視圖···················································································.283
9.4.5 添加/刪除汽車信息·············································································.287
第10 章 網絡通信及實例·····················································································.296
10.1 獲取本機網絡信息·················································································.296
10.2 基于UDP 的數據通信············································································.299
10.2.1 UDP 工作原理·················································································.299
10.2.2 UDP 應用實例·················································································.301
10.3 基于TCP 的數據通信············································································.306
10.3.1 TCP 工作原理··················································································.306
10.3.2 TCP 應用實例··················································································.309
第11 章 定時器、線程和DLL 庫··········································································.320
11.1 定時器和線程························································································.320
11.1.1 定時器:QTimer···············································································.320
11.1.2 線程:QThread·················································································.322
11.2 Qt 程序開發和調用DLL 庫····································································.326
11.2.1 開發DLL························································································.326
11.2.2 使用DLL························································································.329
第12 章 圖元、鼠標事件、序列化、工具欄綜合應用實例:我的繪圖板···············.334
【技術基礎】···································································································.335
12.1 繪圖相關技術························································································.335
12.2 繪圖場景數據結構·················································································.336
12.2.1 數據結構設計··················································································.336
12.2.2 數據結構實現··················································································.337
12.2.3 數據結構處理··················································································.339
【實例開發】···································································································.341
12.3 創建項目·······························································································.341
12.3.1 項目設置························································································.341
12.3.2 界面設計························································································.344
12.3.3 程序框架························································································.346
12.4 主界面開發···························································································.350
12.4.1 文件管理欄開發···············································································.350
12.4.2 樣式欄開發·····················································································.351
12.4.3 工具箱開發·····················································································.355
12.4.4 繪圖區和狀態欄開發·········································································.356
12.5 繪圖功能開發························································································.359
12.5.1 創建圖元························································································.359
12.5.2 調整圖元大小··················································································.365
12.5.3 設置樣式························································································.368
12.5.4 操縱圖元························································································.376
12.6 圖元文件管理························································································.377
第13 章 MDI、文件目錄、樹、Python 綜合應用實例:文檔分析器······················.383
【技術基礎】···································································································.384
【實例開發】···································································································.384
13.1 創建項目·······························································································.384
13.1.1 項目設置························································································.384
13.1.2 界面設計························································································.388
13.1.3 程序框架························································································.391
13.2 文檔的管理···························································································.398
13.2.1 目錄導航························································································.398
13.2.2 文檔歸類························································································.399
13.2.3 打開文檔························································································.401
13.2.4 多文檔窗口布局···············································································.403
13.3 文檔的分析···························································································.405
13.3.1 文本的分析·····················································································.406
13.3.2 獲取網頁主題鏈接············································································.410
13.3.3 識別、掃描書頁文字·········································································.412
13.3.4 分析結果處理··················································································.417
13.4 其他功能·······························································································.418
第14 章 網絡通信、SQLite、圖元系統、實時語音綜合應用實例:簡版微信········.420
【技術基礎】···································································································.421
14.1 網絡通信·······························································································.421
14.1.1 UDP 收發消息·················································································.421
14.1.2 TCP 傳輸························································································.423
14.2 服務器數據庫························································································.425
14.2.1 創建數據庫MyWeDb·········································································.425
14.2.2 數據庫訪問與操作············································································.426
14.3 SQLite 應用···························································································.427
14.3.1 創建SQLite·····················································································.427
14.3.2 記錄日志························································································.428
14.3.3 加載日志························································································.429
14.4 用到的其他控件和技術··········································································.430
【實例開發】···································································································.430
14.5 創建項目·······························································································.430
14.5.1 客戶端項目·····················································································.430
14.5.2 服務器項目·····················································································.440
14.6 界面開發·······························································································.443
14.6.1 界面設計························································································.443
14.6.2 初始化···························································································.446
14.6.3 界面切換························································································.448
14.7 基本功能開發························································································.449
14.7.1 用戶管理························································································.449
14.7.2 文字聊天························································································.454
14.7.3 信息暫存與轉發···············································································.457
14.8 增強功能開發························································································.459
14.8.1 功能演示························································································.459
14.8.2 文件、圖片、語音的傳輸···································································.461
14.8.3 實時語音通話··················································································.472
第15 章 多媒體、線程、視頻圖元、MySQL 綜合應用實例:簡版抖音·················.477
【技術基礎】···································································································.477
15.1 視頻播放處理························································································.477
15.2 MySQL 數據庫······················································································.478
15.2.1 設計數據庫MyTikTok ·······································································.478
15.2.2 訪問與操作數據庫············································································.480
15.2.3 特殊數據類型讀寫············································································.481
【實例開發】···································································································.481
15.3 創建項目·······························································································.481
15.3.1 項目結構························································································.481
15.3.2 主程序框架·····················································································.485
15.4 主界面開發···························································································.489
15.4.1 界面設計························································································.489
15.4.2 初始化···························································································.491
15.4.3 運行效果························································································.492
15.5 視頻基本功能開發·················································································.492
15.5.1 視頻播放························································································.492
15.5.2 視頻控制························································································.497
15.5.3 視頻信息顯示··················································································.498
15.6 特色功能開發························································································.501
15.6.1 關注和點贊·····················································································.501
15.6.2 評論與彈幕·····················································································.505
15.6.3 根據用戶喜好推薦視頻······································································.509
15.7 視頻發布·······························································································.513
15.7.1 界面設計························································································.513
15.7.2 視頻預覽························································································.514
15.7.3 視頻發布························································································.515
第16 章 Qt 5.15+OpenCV(含Contrib)-4.6.0 環境搭建····································.519
16.1 準備工作·······························································································.519
16.2 配置編譯器···························································································.522
16.3 編譯OpenCV·························································································.527
16.4 安裝OpenCV·························································································.528
第17 章 OpenCV 圖片處理及實例·······································································.531
17.1 圖片美化·······························································································.531
17.1.1 圖片增強························································································.531
17.1.2 平滑濾波························································································.537
17.2 多圖合成·······························································································.543
17.2.1 程序界面························································································.544
17.2.2 全局變量及方法···············································································.545
17.2.3 初始化顯示·····················································································.545
17.2.4 功能實現························································································.546
17.2.5 運行效果························································································.547
17.3 圖片旋轉縮放························································································.548
17.3.1 程序界面························································································.548
17.3.2 全局變量及方法···············································································.549
17.3.3 初始化顯示·····················································································.550
17.3.4 功能實現························································································.551
17.3.5 運行效果························································································.552
17.4 圖片智能識別························································································.553
17.4.1 尋找匹配物體··················································································.553
17.4.2 人臉識別························································································.557
第18 章 OpenCV、樹控件、表格控件綜合應用實例:醫院遠程診斷系統············.563
18.1 功能需求·······························································································.563
18.1.1 診療點科室管理···············································································.563
18.1.2 CT 相片顯示和處理···········································································.564
18.1.3 患者信息選項卡···············································································.564
18.1.4 后臺數據庫瀏覽···············································································.564
18.1.5 界面的總體效果···············································································.565
18.2 Qt 項目工程創建與配置·········································································.565
18.3 界面設計·······························································································.567
18.4 功能實現·······························································································.570
18.4.1 數據庫準備·····················································································.570
18.4.2 Qt 應用程序主體框架········································································.572
18.4.3 界面初始化功能實現·········································································.577
18.4.4 診斷功能實現··················································································.578
18.4.5 患者信息表單··················································································.581
18.5 醫院遠程診斷系統運行演示···································································.583
18.5.1 啟動、連接數據庫············································································.583
18.5.2 執行診斷分析··················································································.584
18.5.3 表單信息聯動··················································································.585
18.5.4 查看病歷························································································.586
第19 章 QML 編程基礎·······················································································.587
19.1 QML 概述·····························································································.587
19.1.1 第一個QML 程序·············································································.588
19.1.2 QML 文檔構成·················································································.592
19.2 QML 可視元素······················································································.595
19.2.1 矩形元素:Rectangle ·········································································.595
19.2.2 圖像元素:Image··············································································.596
19.2.3 文本元素:Text················································································.598
19.2.4 自定義元素(組件) ·········································································.600
19.3 QML 元素布局······················································································.602
19.3.1 定位器:Positioner ············································································.602
19.3.2 錨:Anchor ·····················································································.607
19.4 QML 事件處理······················································································.611
19.4.1 鼠標事件························································································.611
19.4.2 鍵盤事件························································································.613
19.4.3 輸入控件與焦點···············································································.616
19.5 QML 集成JavaScript··············································································.618
19.5.1 調用JavaScript 函數··········································································.618
19.5.2 導入JS 文件····················································································.620
第20 章 QML 動畫特效·······················································································.623
20.1 QML 動畫元素······················································································.623
20.1.1 PropertyAnimation 元素······································································.623
20.1.2 其他動畫元素··················································································.628
20.1.3 Animator 元素··················································································.630
20.2 流UI 界面·····························································································.632
20.2.1 狀態切換機制··················································································.632
20.2.2 設計組合動畫··················································································.635
20.3 圖像特效·······························································································.638
20.3.1 3D 旋轉··························································································.638
20.3.2 色彩處理························································································.639
第21 章 Qt Quick Controls 開發基礎···································································.642
21.1 Qt Quick Controls 概述···········································································.642
21.1.1 第一個Qt Quick Controls 程序·····························································.642
21.1.2 更換界面主題樣式············································································.644
21.2 Qt Quick 控件························································································.645
21.2.1 概述······························································································.645
21.2.2 基本控件························································································.645
21.2.3 高級控件························································································.650
21.2.4 樣式定制························································································.654
21.3 Qt Quick 對話框·····················································································.662
21.4 Qt Quick 選項標簽·················································································.667
附錄A Qt 5 簡單調試···························································································.673
A.1 修正語法錯誤·························································································.673
A.2 設置斷點································································································.674
A.3 程序調試運行·························································································.674
A.4 查看和修改變量的值··············································································.675
A.5 qDebug()的用法······················································································.677