具體描述
內容簡介
Qt平颱體係與應用-Qt5.5+核心方法、技巧與案例
本書重點介紹瞭基於Qt開發體係結構中麵嚮底層和頂層程序設計的項目研究結果,以一套集成軟件層、硬件層、網絡層、跨語言層和虛擬服務與虛擬設備層等完整應用程序的開發為例,對Qt平颱的相關原理、方法與技巧進行說明。在底層方麵,主要研究瞭Qt在桌麵係統底層驅動程序開發的模塊結構與特點,並以我國二代身份證讀卡器及SIM卡讀/寫卡器為對象,給齣係統設計、代碼與實例。在頂層方麵,重點研究瞭當前跨平颱、跨語言、跨代碼的遠程程序通信協議,重點講解瞭基於C++的Qt應用與基於Java語言的Web應用,其通過第三方遠程通信協議進行跨語言級的函數調用,尤其重點介紹瞭允許二進製通信的Hessian遠程通信協議,並給齣瞭相應的解析實例。此外本書還介紹瞭Qt主要的高級功能模塊,包括界麵設計、Web網站文件的上傳與下載、應用實例檢測、外部動態鏈接庫調用、係統托盤管理、網絡連接狀態的查看、外部進程的執行、進程間通過Windows消息通信、INI與JSON格式文件的讀/寫、程序打包與發布等課題。
本書所有代碼均基於Qt5.5.1平颱,可供該領域的程序設計人員、工程開發與研究人員參考,也可供自然科學和工程技術領域中的相關人員參考。
目錄
第1章 引 言…………………………………………………………………………………… 1
1.1 Qt框架的特色…………………………………………………………………………… 1
1.1.1 跨平颱……………………………………………………………………………… 1
1.1.2 藝術級圖形界麵設計……………………………………………………………… 3
1.1.3 抽象化核心模塊設計……………………………………………………………… 3
1.1.4 環境準備…………………………………………………………………………… 3
1.2 本書的特色……………………………………………………………………………… 5
1.2.1 完整準確的參考…………………………………………………………………… 6
1.2.2 係統深入的說明…………………………………………………………………… 6
1.2.3 實例演示:遠程傳輸與控製係統…………………………………………………… 7
1.3 遠程傳輸與控製係統的結構…………………………………………………………… 7
1.3.1 總體結構…………………………………………………………………………… 7
1.3.2 軟件層……………………………………………………………………………… 7
1.3.3 硬件層……………………………………………………………………………… 9
1.3.4 網絡層……………………………………………………………………………… 9
1.3.5 跨語言通信層……………………………………………………………………… 9
1.3.6 數據層……………………………………………………………………………… 10
1.3.7 遠端控製層………………………………………………………………………… 10
1.3.8 打包與發布………………………………………………………………………… 10
第2章 軟件層係統功能模塊………………………………………………………………… 11
2.1 Qt項目………………………………………………………………………………… 11
2.1.1 Qt工程…………………………………………………………………………… 11
2.1.2 PRO文件………………………………………………………………………… 12
2.1.3 影子編譯…………………………………………………………………………… 14
2.1.4 版本控製…………………………………………………………………………… 14
2.2 係統程序窗口…………………………………………………………………………… 14
2.2.1 對話框開發………………………………………………………………………… 14
2.2.2 資源管理…………………………………………………………………………… 16
2.2.2.1 圖片與圖標資源……………………………………………………………… 16
2.2.2.2 css樣式錶…………………………………………………………………… 17
2.3 登錄係統………………………………………………………………………………… 18
2.3.1 按鈕響應…………………………………………………………………………… 18
2.3.2 讀/寫組件值……………………………………………………………………… 19
2.4 托盤管理………………………………………………………………………………… 19
2.4.1 Windows係統托盤……………………………………………………………… 19
2.4.2 事件劫持…………………………………………………………………………… 20
2.4.3 菜單管理…………………………………………………………………………… 21
2.4.3.1 鼠標右鍵動作………………………………………………………………… 21
2.4.3.2 鼠標左鍵動作………………………………………………………………… 23
2.5 單實例管理……………………………………………………………………………… 24
2.5.1 進程與實例………………………………………………………………………… 24
2.5.2 單實例管理概述…………………………………………………………………… 25
2.6 再論對話框……………………………………………………………………………… 26
2.6.1 係統對話框………………………………………………………………………… 26
2.6.2 自定義對話框……………………………………………………………………… 27
第3章 Web網絡服務模塊…………………………………………………………………… 29
3.1 Qt網絡模塊…………………………………………………………………………… 29
3.1.1 網絡模塊類………………………………………………………………………… 29
3.1.2 QNetworkAccessManager類與QNetworkReply類…………………………… 29
3.2 下載升級文件…………………………………………………………………………… 30
3.2.1 信號與槽函數……………………………………………………………………… 30
3.2.2 功能模塊與類……………………………………………………………………… 31
3.3 程序自動升級…………………………………………………………………………… 33
3.3.1 強製升級機製……………………………………………………………………… 33
3.3.2 係統實現…………………………………………………………………………… 34
3.3.2.1 讀取INI文件中的版本信息…………………………………………………… 34
3.3.2.2 設計本地信息INI文件………………………………………………………… 34
3.3.2.3 讀寫MyDocuments目錄下的INI文件………………………………………… 35
3.3.2.4 邏輯判斷……………………………………………………………………… 36
3.3.2.5 開始下載……………………………………………………………………… 37
3.3.2.6 啓動進程外EXE文件完成升級………………………………………………… 39
第4章 通用跨語言層遠程網絡通信………………………………………………………… 40
4.1 遠程調用與通信………………………………………………………………………… 40
4.1.1 進程間通信………………………………………………………………………… 40
4.1.2 網絡間通信………………………………………………………………………… 41
4.1.2.1 通信協議……………………………………………………………………… 41
4.1.2.2 通信程序與語言……………………………………………………………… 42
4.1.3 跨語言通信………………………………………………………………………… 48
4.1.3.1 可執行程序層跨語言通信……………………………………………………… 48
4.1.3.2 鏈接庫層跨語言通信………………………………………………………… 49
4.1.3.3 代碼層跨語言通信…………………………………………………………… 53
4.2 代碼層跨語言通信協議………………………………………………………………… 53
4.2.1 JavaRMI ………………………………………………………………………… 53
2 Qt平颱體係與應用———Qt5.5+核心方法、技巧與案例
4.2.2 WebService ……………………………………………………………………… 54
4.2.2.1 WebService功能實現………………………………………………………… 54
4.2.2.2 WebService功能描述………………………………………………………… 55
4.2.2.3 WebService遠程調用………………………………………………………… 55
4.2.3 Hessian協議……………………………………………………………………… 58
4.2.3.1 Hessian協議介紹……………………………………………………………… 58
4.2.3.2 代碼實現……………………………………………………………………… 59
4.3 Qt中的Hessian協議………………………………………………………………… 60
4.3.1 Hessian的C語言實現…………………………………………………………… 60
4.3.1.1 官方實現……………………………………………………………………… 60
4.3.1.2 第三方實現…………………………………………………………………… 61
4.3.1.3 Qt實現……………………………………………………………………… 62
4.3.2 qhessian的遠程過程調用………………………………………………………… 63
4.3.2.1 qhessian包的結構…………………………………………………………… 63
4.3.2.2 通信原理與代碼實現………………………………………………………… 66
4.4 遠程傳輸與控製係統實例解析………………………………………………………… 69
4.4.1 總體需求分析……………………………………………………………………… 69
4.4.2 服務器端業務需求與功能模塊…………………………………………………… 70
4.4.2.1 功能模塊與接口……………………………………………………………… 70
4.4.2.2 數據層支持…………………………………………………………………… 71
4.4.3 客戶端業務需求與功能模塊……………………………………………………… 71
4.4.3.1 客戶端引入qhessian模塊……………………………………………………… 71
4.4.3.2 客戶端實現…………………………………………………………………… 73
4.4.3.3 主程序接口調用……………………………………………………………… 75
4.4.4 編譯與調試………………………………………………………………………… 76
4.4.4.1 配置文件……………………………………………………………………… 76
4.4.4.2 服務器與客戶端……………………………………………………………… 76
第5章 硬件模塊與底層驅動………………………………………………………………… 78
5.1 Qt引入硬件層………………………………………………………………………… 78
5.1.1 動態鏈接庫………………………………………………………………………… 79
5.1.2 Qt程序靜態加載動態鏈接庫…………………………………………………… 79
5.1.2.1 Linux平颱…………………………………………………………………… 80
5.1.2.2 Windows平颱………………………………………………………………… 80
5.1.2.3 代碼實現……………………………………………………………………… 81
5.1.3 Qt程序動態加載動態鏈接庫…………………………………………………… 85
5.1.4 Qt程序加載非完整動態鏈接庫………………………………………………… 86
5.2 二代身份證讀卡器……………………………………………………………………… 90
5.2.1 功能描述…………………………………………………………………………… 90
5.2.1.1 二代身份證…………………………………………………………………… 90
5.2.1.2 二代身份證讀卡器…………………………………………………………… 91
5.2.2 驅動接口…………………………………………………………………………… 92
5.2.2.1 公安部標準接口……………………………………………………………… 92
5.2.2.2 C語言實現…………………………………………………………………… 93
5.2.3 Qt調用…………………………………………………………………………… 96
5.2.3.1 讀取身份證信息……………………………………………………………… 96
5.2.3.2 身份證信息的原始格式……………………………………………………… 101
5.2.3.3 身份證照片與指紋信息……………………………………………………… 104
5.2.3.4 Hessian上傳身份證信息……………………………………………………… 105
5.2.4 兼容性…………………………………………………………………………… 113
5.3 SIM 卡讀/寫卡器…………………………………………………………………… 114
5.3.1 SIM 卡…………………………………………………………………………… 114
5.3.2 SIM 卡開發……………………………………………………………………… 115
5.3.2.1 ISO7816 …………………………………………………………………… 116
5.3.2.2 GSM11.11 ………………………………………………………………… 117
5.3.2.3 GSM11.14 ………………………………………………………………… 117
5.3.2.4 APDU 指令集……………………………………………………………… 118
5.3.2.5 Winscard封裝……………………………………………………………… 122
5.3.3 實際係統開發…………………………………………………………………… 124
5.3.3.1 聯通SIM 卡………………………………………………………………… 124
5.3.3.2 移動SIM 卡………………………………………………………………… 126
5.3.4 Qt實現SIM 卡的讀/寫操作…………………………………………………… 128
5.3.4.1 功能需求與程序架構………………………………………………………… 128
5.3.4.2 讀/寫SIM 卡………………………………………………………………… 128
5.4 其他硬件設備………………………………………………………………………… 136
5.4.1 指紋識彆設備…………………………………………………………………… 136
5.4.2 短信業務模塊設備……………………………………………………………… 136
第6章 Qt關鍵模塊與高級功能…………………………………………………………… 137
6.1 Qt最優語言特色:再論信號與槽…………………………………………………… 137
6.1.1 信號與槽原理…………………………………………………………………… 137
6.1.1.1 Windows傳統消息機製……………………………………………………… 137
6.1.1.2 Qt機製……………………………………………………………………… 139
6.1.2 示例程序………………………………………………………………………… 140
6.1.2.1 定義信號與槽……………………………………………………………… 140
6.1.2.2 創建信號與槽函數…………………………………………………………… 141
6.1.2.3 連接並使用信號與槽………………………………………………………… 142
6.2 Qt事件處理…………………………………………………………………………… 143
6.2.1 事件處理機製…………………………………………………………………… 143
6.2.2 高級事件響應…………………………………………………………………… 146
4 Qt平颱體係與應用———Qt5.5+核心方法、技巧與案例
6.2.2.1 自主推動事件循環…………………………………………………………… 146
6.2.2.2 與Windows程序消息通信…………………………………………………… 146
6.3 係統關鍵功能………………………………………………………………………… 148
6.3.1 查看網絡是否連接……………………………………………………………… 148
6.3.2 識彆操作係統位數……………………………………………………………… 150
6.3.3 查看係統目錄…………………………………………………………………… 150
6.3.3.1 獲取Windows係統目錄……………………………………………………… 150
6.3.3.2 獲取應用程序所在目錄……………………………………………………… 151
6.3.4 防止程序自動退齣……………………………………………………………… 152
6.3.5 執行外部進程…………………………………………………………………… 152
6.3.5.1 啓動第三方進程……………………………………………………………… 152
6.3.5.2 停止第三方進程……………………………………………………………… 153
6.3.5.3 後颱方式啓動第三方進程…………………………………………………… 154
6.3.5.4 指定輸齣方式啓動第三方進程……………………………………………… 154
6.3.5.5 啓動第三方BAT程序……………………………………………………… 154
6.4 服務模塊……………………………………………………………………………… 155
6.4.1 INI文件操作…………………………………………………………………… 155
6.4.2 JSON 文件操作………………………………………………………………… 156
6.4.2.1 簡單格式的JSON串………………………………………………………… 156
6.4.2.2 復雜格式的JSON串………………………………………………………… 157
6.4.3 XML文件操作………………………………………………………………… 158
6.4.4 二進製數據處理………………………………………………………………… 160
6.4.4.1 base64碼…………………………………………………………………… 160
6.4.4.2 文本化處理………………………………………………………………… 160
6.4.5 Qt日誌…………………………………………………………………………… 161
第7章 程序打包與發布……………………………………………………………………… 163
7.1 發布Qt程序………………………………………………………………………… 163
7.1.1 Release與Debug編譯………………………………………………………… 163
7.1.2 動態鏈接庫依賴………………………………………………………………… 163
7.2 打包程序……………………………………………………………………………… 165
7.2.1 InstallShield打包……………………………………………………………… 166
7.2.1.1 創建基本的安裝包…………………………………………………………… 166
7.2.1.2 卸載功能…………………………………………………………………… 166
7.2.1.3 安裝第三方包與安裝後重啓………………………………………………… 166
7.2.2 inno打包………………………………………………………………………… 168
7.2.2.1 基本功能…………………………………………………………………… 168
7.2.2.2 高級功能…………………………………………………………………… 170
參考文獻………………………………………………………………………………………… 176
《Qt平颱體係與應用——Qt5.5+核心方法、技巧與案例》一書,旨在為讀者提供一個全麵、深入、實用的Qt開發指南。本書並非簡單羅列API,而是著力於解析Qt平颱的內在機製、核心設計理念以及在實際開發中行之有效的解決策略。通過大量的代碼示例、詳盡的原理講解和貼近實際的案例分析,幫助讀者掌握Qt 5.5及以後版本的重要特性,構建健壯、高效、可維護的應用程序。 一、 Qt核心體係深度剖析:理解“為什麼”與“怎麼樣” 本書的首要目標是讓讀者真正理解Qt的“魂”。我們將從Qt的核心體係結構入手,深入解析其背後精妙的設計。 Qt對象模型(Qt Object Model): 這是Qt最基礎也是最重要的特性之一。我們將詳細闡述信號與槽(Signals and Slots)的實現原理,包括信號的發布、槽的連接、連接的類型(Qt::AutoConnection, Qt::DirectConnection, Qt::QueuedConnection, Qt::BlockingQueuedConnection)及其在多綫程環境下的行為差異。理解元對象係統(Meta-Object System)是掌握信號與槽的關鍵,我們將剖析Q_OBJECT宏的作用,moc(Meta-Object Compiler)的工作流程,以及屬性(Properties)、方法(Methods)、枚舉(Enums)等如何在運行時動態訪問。這將幫助開發者寫齣更靈活、更易於擴展的代碼。 Qt事件處理機製(Qt Event Handling): 應用程序的交互性很大程度上依賴於事件處理。本書將詳細講解Qt的事件循環(Event Loop)和事件分發機製。從低層輸入事件(如鼠標、鍵盤)到高層應用事件(如定時器事件、繪製事件),我們將逐步揭示事件如何在Qt對象之間傳遞和處理。特彆地,我們會重點介紹事件過濾(Event Filtering)技術,以及如何通過重寫`QObject::event()`和`QCoreApplication::notify()`來實現自定義的事件處理邏輯,這對於構建復雜的UI交互或實現特定功能至關重要。 Qt內存管理與資源控製: Qt采用瞭一種稱為“父子關係”的對象樹(Object Tree)機製來管理內存。我們將深入探討這一機製的工作原理,解釋當父對象被銷毀時,其子對象是如何自動釋放的。同時,也會討論在某些特定場景下,手動管理內存的必要性,以及如何避免內存泄漏。此外,還會涉及Qt的字符串(QString)、容器(QVector, QList, QMap等)的內存開銷和性能優化技巧。 Qt跨平颱能力解析: Qt的強大之處在於其跨平颱特性。本書將闡釋Qt是如何屏蔽底層操作係統的差異的,例如通過抽象層(Abstraction Layer)來處理文件係統、網絡通信、圖形繪製等。我們將分析Qt的平颱無關API設計,以及在特定情況下如何編寫平颱相關的代碼,從而在保持跨平颱性的同時,又能充分利用特定平颱的原生功能。 二、 Qt 5.5+核心技術深入探討:掌握現代Qt開發 本書緊跟Qt 5.5及以後版本的發展,重點講解其中引入和改進的關鍵技術,幫助讀者構建現代化、高性能的應用程序。 Qt Quick與QML: 這是Qt 5.x以來最重要的革新之一。我們將從QML(Qt Meta-Object Language)的基本語法、核心元素(Item, Rectangle, Text, Image等)講起,逐步深入到JavaScript集成、屬性綁定(Property Binding)、狀態(States)、動畫(Animations)和過渡(Transitions)的實現。 QML與C++的交互: 掌握QML和C++之間的無縫交互是構建混閤應用的關鍵。本書將詳細講解如何將C++對象暴露給QML,如何從QML調用C++方法,以及如何利用信號與槽在兩者之間傳遞數據。 Qt Quick Controls 2: 針對移動和嵌入式設備優化的Qt Quick Controls 2將是重點講解內容。我們將介紹其扁平化設計、高效渲染以及如何根據不同平颱進行定製,助力開發者構建美觀且響應迅速的用戶界麵。 性能優化: QML的性能調優是大型項目中的重要環節。我們將探討如何通過閤理使用屬性綁定、延遲加載、異步操作等技術來提升QML應用的性能。 Qt Widgets模塊的持續演進: 盡管Qt Quick備受矚目,但Qt Widgets仍然是桌麵應用開發的主流。本書將迴顧Qt Widgets的核心組件,如`QWidget`、`QMainWindow`、`QDialog`等,並重點關注Qt 5.5+在這一模塊的改進,例如新控件的加入、樣式(Styling)和主題(Theming)的增強,以及與Qt Quick的集成策略。 Qt 3D: 隨著3D圖形在遊戲、模擬、可視化等領域的廣泛應用,Qt 3D模塊應運而生。本書將介紹Qt 3D的核心概念,如實體(Entity)、組件(Component)、場景圖(Scene Graph)等,並演示如何使用Qt 3D創建和渲染3D模型,實現基本的3D交互。 Qt Multimedia: 掌握多媒體處理能力對於開發富媒體應用至關重要。本書將深入講解Qt Multimedia模塊,包括音頻播放、視頻播放、攝像頭捕獲、圖像處理等,並提供實際的開發案例。 Qt Network: 現代應用離不開網絡通信。我們將詳細介紹Qt Network模塊,包括HTTP、TCP、UDP通信,套接字編程(Socket Programming),以及SSL/TLS安全連接的實現。 三、 實戰技巧與解決方案:學以緻用,解決開發痛點 理論與實踐相結閤是本書的核心理念。我們將分享大量在實際開發中遇到的問題及其解決方案。 高效的UI設計與布局: 除瞭QML,對於Widgets應用,我們也將深入講解各種布局管理器(QVBoxLayout, QHBoxLayout, QGridLayout, QFormLayout)的使用技巧,以及如何通過樣式錶(Style Sheets)和自定義控件來實現高度定製化的界麵。 數據庫訪問: Qt提供瞭強大的Qt SQL模塊,用於與各種數據庫進行交互。本書將詳細介紹數據庫連接、SQL語句執行、模型/視圖(Model/View)編程等,並提供常見數據庫(如SQLite, MySQL, PostgreSQL)的集成示例。 多綫程與並發編程: 在GUI應用中,進行耗時操作時,避免阻塞主綫程至關重要。本書將深入講解Qt的多綫程(QThread)和綫程池(QThreadPool)機製,以及如何安全地在不同綫程之間傳遞數據,例如使用信號與槽進行綫程間通信,以及使用信號量、互斥鎖等同步機製。 國際化與本地化(i18n & l10n): 編寫能夠適應不同語言和地區的應用是現代軟件開發的必備技能。我們將詳細講解Qt的國際化工具(`lupdate`, `lrelease`)和本地化流程,以及如何在代碼中加載和使用翻譯文件。 性能分析與優化: 應用程序的性能直接影響用戶體驗。本書將介紹Qt提供的性能分析工具(如Qt Creator的CPU Profiler, Memory Analyzer),並分享針對常見性能瓶頸的優化策略,例如內存管理優化、算法優化、UI渲染優化等。 調試與測試: 掌握有效的調試技巧是保證軟件質量的關鍵。我們將介紹Qt Creator的強大調試功能,以及編寫單元測試(Unit Testing)和集成測試(Integration Testing)的重要性,並展示如何使用Qt Test模塊進行自動化測試。 版本控製與項目管理: 雖然不是Qt本身的內容,但良好的版本控製(如Git)和項目管理習慣對於任何軟件開發項目都至關重要。本書會適當提及這些最佳實踐。 四、 經典案例分析:融會貫通,舉一反三 本書將通過一係列精心設計的案例,將上述理論和技巧融會貫通。這些案例將覆蓋不同類型的應用場景,例如: 桌麵工具類應用: 如文件管理器、文本編輯器、圖像查看器等,演示Widgets模塊的強大功能。 數據可視化應用: 利用Qt Charts模塊,展示如何創建各種圖錶,實現數據的直觀展示。 網絡通信應用: 如簡單的客戶端/服務器程序、即時通訊工具,演示Qt Network模塊的應用。 多媒體播放器: 結閤Qt Multimedia模塊,構建功能完備的音視頻播放器。 嵌入式設備UI: 利用Qt Quick和QML,設計和開發適用於嵌入式設備的交互界麵。 集成第三方庫: 演示如何將外部C/C++庫集成到Qt項目中。 本書的編寫風格將力求清晰、嚴謹、易懂,並注重實用性。我們相信,通過本書的學習,讀者不僅能夠熟練掌握Qt 5.5+的開發技術,更能深刻理解Qt的設計哲學,從而在未來的軟件開發道路上,能夠獨立解決復雜問題,創造齣更多優秀的作品。