每日激勵:“不設限和自我肯定的心態:I can do all things。 — Stephen Curry”
緒論?:
本章將開啟Qt的學習,Qt是一個較為古老但仍然在GUI圖形化界面設計中有著舉足輕重的地位,因為它適合嵌入式和多種平臺而被廣泛使用,本章將先從認識Qt,再到理解Qt的作用和地位,再到Qt的安裝下載,以及創建好一個Qt項目,再到最后的理解Qt項目中提前配備好的文件,帶你入門Qt項目。
————————
早關注不迷路,話不多說安全帶系好,發車啦(建議電腦觀看)。
1. 認識Qt
首先QT是用來桌面應用開發(電腦上寫的程序),其中Qt無法開發網頁前端和移動開發(雖然目前qt支持了移動開發,但暫時還沒啥廠商使用qt開發的)
QT客戶端開發的重要任務:編寫和用戶交互的界面
在用戶交互的界面:由兩種典型風格構成:
- 命令行界面/終端界面(黑框框)TUI,常給程序員使用的專業軟件
- 圖形化界面 GUI 給普通用戶使用(也就類似我們常用的windows環境)
而Qt就是用來編寫 GUI程序的一套框架~~
在Windows編寫GUI程序,有很多種方法,其中QT只是其中之一,windows下還有那些方案可以開發GUI:
- Windows API 系統原生提供的API,開發起來非常原始和繁瑣(最簡單古老的方式)
- MFC:使用了面向對象的方式,將Windows API接口進行封裝使用(它的影響非常深遠)
- QT:(1991年左右誕生)其中它和MFC類似同樣的都是通過封裝的方式寫成
- 但MFC早就不更新了,而QT仍然在不斷推陳出新
- GTK、WxWidget
- Windows Forms:一個給C#給量身定做的一套GUI技術體系(微軟的編程語言 C#(C sharp))
- WPF、UWP(Windows Forms的升級版)
- Electron:本質上是吧HTML這樣的網頁,打包成一個Windows 上運行的客戶端程序(最初用來開發atom文本編輯器的,后來atom沒了,被微軟的VsCode干趴了),但缺點是運行效率在上面的技術體系中是比較低的
2. Qt 是什么
Qt 是?個 跨平臺的 C++ 圖形??界?應?程序框架 。
- 框架:本質就是一群大佬發明出來的,讓我們可能更加方便靠譜的寫出我們自己的代碼(通過框架約束程序員)
- 其中庫和框架都屬于大佬把代碼寫好了,讓我們使用
- 而庫被程序員調用(程序員是主題)、框架則是占主題,程序員配合框架,完善填充框架中留出的一些細節
編寫c++代碼,框架當然也很重要。C++的生態是割裂的離散的,并不想Java存在巨無霸社群,統一天下
C++不同的開源社區、大廠,各自有各自的框架,各自為政
諾基亞的塞班系統:主推Qt來做作為開發
相比之下,像Qt這種,能被大家共識認可的框架,在整個c++生態中并不多見
1991年,計算機中,誕生了許多神奇的東西:Qt、vim、python、OpenGL、Linux、湯老濕…
QT支持的平臺:
- Windows ? XP、Vista、Win7、Win8、Win2008、Win10(windows各個版本)
- Linux(各種發行版)尤其是Linux中的KDE桌面基于Qt 構建
- TUI 基于命令操作,門檻高但效率也高
- GUI 基于圖形化操作,門檻低,效率也低
- 也有少數用戶使用Linux 桌面,存在幾套環境:GNOME(基于GTK 構建)、KDE(基于Qt 構建的),其中Linux桌面使用過程中有很多問題(容易崩潰)
- Mac系統
- 嵌入式系統
- 也是 Qt 主要的戰場
- 日常使用的,冰箱、洗衣機、路由器。。。這些設備也需要計算機,但這些設備的計算機配置硬件就不用很高了,低配置、低成本,其中的圖形化界面就是通過Qt 來寫,這個領域中也受到了安卓的挑戰
Qt 版本
?前最新的版本是 Qt 6. 但是相對來說 Qt 6 和 Qt 5 之間的核?功能區別不?. 并且企業中也仍然有?量的項?在使? Qt 5.
另外 Qt 在發布的時候還提供了兩種許可證:
- 商業許可: 開發者以商業?的使?Qt框架進?開發和發布軟件的許可,開發者需要購買商業許可并按照相關規定使?Qt框架。商業許可提供了更多的功能和服務,適合于商業軟件開發(需要花錢購買,其中購買它主要提供的是技術支持,買到就是一份服務)
- 開源許可: 開發者以?商業?的使?Qt框架進?開發和發布軟件的許可,開發者可以免費使?Qt框架,但需要遵守開源許可協議的要求,如在軟件中包含Qt許可協議的聲明等(白嫖)
Qt 的優點
- 跨平臺,?乎?持所有的平臺;
- 接?簡單,容易上?,學習 QT 框架對學習其他框架有參考意義。
- ?定程度上簡化了內存回收機制(半自動的垃圾回收,簡化內存釋放,盡可能小的影響程序的效率)
- 開發效率?,能夠快速的構建應?程序。
- 有很好的社區氛圍,市場份額在緩慢上升。
- 可以進?嵌?式開發
Qt 的應?場景
- 桌?應?程序
Qt 能夠創建各種類型的桌?應?程序,包括?件管理器、媒體播放器、繪圖程序等。Qt 應?程序?持多種操作系統,可以運?在 Windows、Linux、macOS 等桌?操作系統上 - 移動應?程序
Qt ?持 Android 和 IOS 移動操作系統,為應?程序提供了強?的跨平臺能?。可以使? Qt 構建各種移動應?程序,例如社交應?、游戲、娛樂等 - 嵌?式系統
Qt 在嵌?式領域應??常?泛,它可以構建?向各種設備的圖形應?程序,在機頂盒、?載娛樂系統、安防監控設備等領域具有?泛的應?
開發的知名軟件:
剪映、WPS Office 辦公軟件、Google Earth ?歌地圖 、VirtualBox 虛擬機軟件…
3. Qt 開發環境的搭建
需要安裝3個部分:
- C++編譯器(gcc/cl.exe,并不是Visual Studio不是IDE,編譯器只是IDE調用的一個程序)
- Qt SDK(SDK 軟件開發包)windows版本 Qt SDK里已經內置了 C++ 編譯器(內置編譯器是mingw,windows版本的gcc/g++)
- 需要有個 Qt 的集成開發環境(IDE)
- Qt Creator(Qt官方提供的,最容易入門,上手的方式,開箱即用不用怎么配置)雖然過程中存在許多bug 但整體來說挺方便
- Visual Studio(功能更強,但需要配置容易出錯)
- Eclipse(并非只是Java IDE,本身是一個IDE平臺可以搭配不同插件構成不同的IDE,但目前市場份額沖擊很大 JetBrain、VSCode)
- 本質只用安裝一個 Qt SDK,另外兩個就有了
下載Qt SDK:
去官方網站(下載一個安裝程序,首選官方網站)
Qt 的官方網站(下載5.14的一個版本相對于不算很新也不老):(國外網站可能速度較慢,想辦法fq)
4. Qt Creator安裝過程
- 關閉網絡跳過注冊
- 選擇路徑(安裝軟件所在目錄常識:不要代中文、特殊符號以及空格)
- Qt SDK中內置的 c++ 編譯器(windows 版本的gcc/g++)
給我們裝好的Qt 配置一下環境變量(不是必須的,但經量配置上防止莫名的錯誤)
- 打開環境變量(windows搜索)
- windows 也是支持多用戶的操作系統(分為用戶變量、系統變量)
- 選擇Path:也就和Linux中的環境變量是一樣的(輸入的一個命令從path路徑中查找!)
- 此處就需要把Qt SDK中的某個目錄假如到Path環境變量中(bin目錄D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin,內部有許多動態庫、exe的目錄)
- 將系統變量中的Path中進行添加該目錄:
配置環境變量是為了:
- 讓操作系統 Qt Creator 工具 ,能夠找到Qt SDK 中提供的exe
- 運行 Qt 程序的時候,能夠找到 .dll 動態庫(Windows環境中)
- 環境變量簡單的理解成:“進程間通信” 機制(讓一個進程借助環境變量找到另外一個進程)
對于安裝成功后會有5個程序他們分別是:
- Assistant:離線官方文檔,也就是存儲許多的函數的使用方法(英文文檔要有耐心)
- Designer:Qt 設計師,圖形化的設計界面的工具,拖拽式的快速生成界面(后面經常使用,但是是搭配 Qt Creator來使用)
- Linguist:Qt 語言家,作用是對國際化進行支持,有點時候寫的程序,要和國際接軌(允許單獨創建一個 語言配置文件,把界面需要用到的各種文字,都配置到文件中,并且在文件中提前把各種一樣的翻譯配置進去)就可以通過簡單的 api 切換這里的語言配置
- Qt 5.14.2:Qt 的命令行
- Qt Creator:Qt 的集成開發根據(學習Qt 過程中最主要的工具)
5. 初始創建Qt項目
- 打開QT Creator
- 打開右上角的文件選擇新建(應用程序)
- 在選擇Application
- Qt Widgets App…
- Qt 不僅支持C++、也支持 Python 和 Java
- 我們本處只涉及第一個 Qt Widgets 選擇后繼續
- 填寫名稱
- 路徑
- 下一步
- 構建系統,通過Qt寫的程序,涉及到一系列的 元編程技術(通過代碼來生成代碼)
- Qt 框架會在編譯的時候,自動先調用一系列根據,基于你自己的代碼,生成一系列的其他的 C++ 代碼,最終編譯的代碼
- 其中 qmake 是老牌的Qt構建工具(默認選擇qmake使用即可)
- CMake 并非Qt專屬,很多的開源項目都會使用CMake
- 其中關注:Base Class:使用Qt Creator 創建項目,會自動的生成一些代碼
- 生成的代碼就包含一個類
- 此處就是要選擇這個自動生成的類的父類
- 此處先選擇QWidget進行學習
- 其中 Class name 就是自己生成的類,Base class 就是父類
- Qt 中內置的類都是以Q開頭
- 而下面的就是文件名,他和上面的類是關聯的(其中可以不一樣,但經量保持一致)
- Form file 非常關鍵: Qt中創建圖形化界面的程序,有兩種方式
- 直接通過c++代碼的方式創建界面
- 通過form file文件,以圖形化的方式來生成界面(此時就可以使用Qt Designer 或直接使用Qt Creator 來編輯這個 ui 文件,從而以圖形化的方式,快速方便的生成圖形化界面)
- 這里是選擇 翻譯文件(對應的語言)暫時不關注,它是和國際化相關的
- 選擇一下基于那個編譯器的Qt SDK 來構建后續代碼
- 就默認勾選 WinGW 就可以了
- 就默認勾選 WinGW 就可以了
- 可以選擇版本控制工具(如git…)
- 最終完成就創建好了
- 當創建好后,在左下角有運行按鈕(綠色三角):
- 其中注意我們創建項目過程中的存儲路徑,不要有中文路徑!!
- 最終就會構建出一個圖形化界面:
6. 認識界面及細節
在構建成功后,會自動生成main函數:
-
其中main函數中有:
- 必備的 QApplication對象
- Widget對象,根據對象就是我們創建項目時選擇的QWidget
-
構建后會生成,Widget.h類
- 其中Q_OBJECT 是一個Qt內置的宏(宏的本質上就是文本替換)
- Q_OBJECT展開之后,就會生成一大堆代碼
- Qt中有一個非常核心的機制,“信號” 和 “槽”
- 如果這個類想使用 信號和槽 就需要引入這個宏!
- 其中構造函數中的 parent 參數:
- 是一個引入的“對象樹”機制(后續細講)
- 創建的Qt對象給掛到對象樹(N叉數)上
- 往樹上掛的時候就需要指定 “父節點”
- UI::Widget* ui
- 它和 Form file 密切相關
- 其中Q_OBJECT 是一個Qt內置的宏(宏的本質上就是文本替換)
-
widget.cpp
-
form file
- 當我們雙擊 ui 文件,此時 Qt Creator 就會調用Qt Designer,打開UI文件,圖形化的界面編輯器
- 此時在點擊左側的編輯按鈕,就會 顯示 ui 文件的本題
- 這個格式 也就是 xml 格式(和html類似,都是使用成對的標簽來表示數據)
- xml 這里的標簽,有那些標簽有什么含義,都是程序員自己定義的(也就是qt開發的大佬們定義的),只用知道 ui 文件本質就是一個xml即可
- 類似的就是自定義應用層協議
- Qt 中使用 xml文件就是描述程序的界面是啥樣的,進一步的qmake會調用相關的工具,依據這個xml文件生成一些c++代碼,從而把完整的界面構造出來
- 當我們雙擊 ui 文件,此時 Qt Creator 就會調用Qt Designer,打開UI文件,圖形化的界面編輯器
-
.pro:Qt 項目的工程文件,也是 qmake 工具 構建時候的重要依據
- 類似于 Linux 中學習的 makefile 文件
- qmake 搭配 .pro 起到的作用 和 makefile 類似的
- 而其中 我們這里并不用去學習 qmake 和 .pro 因為Qt Creator把這個過程都封裝好了,所以我們并不用過多關注,僅需要點擊運行即可
-
上面看到的 .h .cpp .pro .ui 都是源代碼
-
如果編譯運行 Qt 項目,構建過程中還會生成一些中間文件
-
打開文件管理器,查看項目對應的目錄
-
其中我們在運行一次 程序后就會生成一個: build-xxxx
-
這個目錄里面就是項目運行過程中,生成的一些臨時文件:
- 其中就會有makefile文件(qmake + pro生成)、ui_widget.h(內部就是根據xml生成的代碼),他們都是自動生成的
- ui_widget.h本質就是根據xml生成,也就是最終界面的效果展示的具體代碼(具體邏輯如下圖)
-
在Debug中還會有一個 .exe(他本質就是我們生成可執行程序也是生成的界面!)
-
本章完。預知后事如何,暫聽下回分解。
如果有任何問題歡迎討論哈!
如果覺得這篇文章對你有所幫助的話點點贊吧!
持續更新大量QT細致內容,早關注不迷路。
?