【C++ Qt】認識Qt、Qt 項目搭建流程(圖文并茂、通俗易懂)


每日激勵:“不設限和自我肯定的心態:I can do all things。 — Stephen Curry”

緒論?:
本章將開啟Qt的學習,Qt是一個較為古老但仍然在GUI圖形化界面設計中有著舉足輕重的地位,因為它適合嵌入式和多種平臺而被廣泛使用,本章將先從認識Qt,再到理解Qt的作用和地位,再到Qt的安裝下載,以及創建好一個Qt項目,再到最后的理解Qt項目中提前配備好的文件,帶你入門Qt項目。
————————
早關注不迷路,話不多說安全帶系好,發車啦(建議電腦觀看)。

1. 認識Qt

首先QT是用來桌面應用開發(電腦上寫的程序),其中Qt無法開發網頁前端和移動開發(雖然目前qt支持了移動開發,但暫時還沒啥廠商使用qt開發的)
QT客戶端開發的重要任務:編寫和用戶交互的界面

在用戶交互的界面:由兩種典型風格構成:

  1. 命令行界面/終端界面(黑框框)TUI,常給程序員使用的專業軟件
  2. 圖形化界面 GUI 給普通用戶使用(也就類似我們常用的windows環境)

而Qt就是用來編寫 GUI程序的一套框架~~

在Windows編寫GUI程序,有很多種方法,其中QT只是其中之一,windows下還有那些方案可以開發GUI:

  1. Windows API 系統原生提供的API,開發起來非常原始和繁瑣(最簡單古老的方式)
  2. MFC:使用了面向對象的方式,將Windows API接口進行封裝使用(它的影響非常深遠)
  3. QT:(1991年左右誕生)其中它和MFC類似同樣的都是通過封裝的方式寫成
    • 但MFC早就不更新了,而QT仍然在不斷推陳出新
  4. GTK、WxWidget
  5. Windows Forms:一個給C#給量身定做的一套GUI技術體系(微軟的編程語言 C#(C sharp))
  6. WPF、UWP(Windows Forms的升級版)
  7. 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 的優點

  1. 跨平臺,?乎?持所有的平臺;
  2. 接?簡單,容易上?,學習 QT 框架對學習其他框架有參考意義。
  3. ?定程度上簡化了內存回收機制(半自動的垃圾回收,簡化內存釋放,盡可能小的影響程序的效率)
  4. 開發效率?,能夠快速的構建應?程序。
  5. 有很好的社區氛圍,市場份額在緩慢上升。
  6. 可以進?嵌?式開發

Qt 的應?場景

  • 桌?應?程序
    Qt 能夠創建各種類型的桌?應?程序,包括?件管理器、媒體播放器、繪圖程序等。Qt 應?程序?持多種操作系統,可以運?在 Windows、Linux、macOS 等桌?操作系統上
  • 移動應?程序
    Qt ?持 Android 和 IOS 移動操作系統,為應?程序提供了強?的跨平臺能?。可以使? Qt 構建各種移動應?程序,例如社交應?、游戲、娛樂等
  • 嵌?式系統
    Qt 在嵌?式領域應??常?泛,它可以構建?向各種設備的圖形應?程序,在機頂盒、?載娛樂系統、安防監控設備等領域具有?泛的應?

開發的知名軟件:
剪映、WPS Office 辦公軟件、Google Earth ?歌地圖 、VirtualBox 虛擬機軟件…

3. Qt 開發環境的搭建

需要安裝3個部分:

  1. C++編譯器(gcc/cl.exe,并不是Visual Studio不是IDE,編譯器只是IDE調用的一個程序)
  2. Qt SDK(SDK 軟件開發包)windows版本 Qt SDK里已經內置了 C++ 編譯器(內置編譯器是mingw,windows版本的gcc/g++)
  3. 需要有個 Qt 的集成開發環境(IDE)
    1. Qt Creator(Qt官方提供的,最容易入門,上手的方式,開箱即用不用怎么配置)雖然過程中存在許多bug 但整體來說挺方便
    2. Visual Studio(功能更強,但需要配置容易出錯)
    3. Eclipse(并非只是Java IDE,本身是一個IDE平臺可以搭配不同插件構成不同的IDE,但目前市場份額沖擊很大 JetBrain、VSCode)
  • 本質只用安裝一個 Qt SDK,另外兩個就有了

下載Qt SDK:

去官方網站(下載一個安裝程序,首選官方網站)
Qt 的官方網站(下載5.14的一個版本相對于不算很新也不老):(國外網站可能速度較慢,想辦法fq)

4. Qt Creator安裝過程

  1. 關閉網絡跳過注冊
  2. 選擇路徑(安裝軟件所在目錄常識:不要代中文、特殊符號以及空格)
  3. 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中進行添加該目錄:
    在這里插入圖片描述

配置環境變量是為了:

  1. 讓操作系統 Qt Creator 工具 ,能夠找到Qt SDK 中提供的exe
  2. 運行 Qt 程序的時候,能夠找到 .dll 動態庫(Windows環境中)
  3. 環境變量簡單的理解成:“進程間通信” 機制(讓一個進程借助環境變量找到另外一個進程)

在這里插入圖片描述

對于安裝成功后會有5個程序他們分別是:

  1. Assistant:離線官方文檔,也就是存儲許多的函數的使用方法(英文文檔要有耐心)
  2. Designer:Qt 設計師,圖形化的設計界面的工具,拖拽式的快速生成界面(后面經常使用,但是是搭配 Qt Creator來使用)
  3. Linguist:Qt 語言家,作用是對國際化進行支持,有點時候寫的程序,要和國際接軌(允許單獨創建一個 語言配置文件,把界面需要用到的各種文字,都配置到文件中,并且在文件中提前把各種一樣的翻譯配置進去)就可以通過簡單的 api 切換這里的語言配置
  4. Qt 5.14.2:Qt 的命令行
  5. Qt Creator:Qt 的集成開發根據(學習Qt 過程中最主要的工具)

5. 初始創建Qt項目

  1. 打開QT Creator
  2. 打開右上角的文件選擇新建(應用程序)
    1. 在選擇Application
    2. Qt Widgets App…
    3. Qt 不僅支持C++、也支持 Python 和 Java
      在這里插入圖片描述
      在這里插入圖片描述
  3. 我們本處只涉及第一個 Qt Widgets 選擇后繼續
    1. 填寫名稱
    2. 路徑
    3. 下一步
      在這里插入圖片描述
  4. 構建系統,通過Qt寫的程序,涉及到一系列的 元編程技術(通過代碼來生成代碼)
    1. Qt 框架會在編譯的時候,自動先調用一系列根據,基于你自己的代碼,生成一系列的其他的 C++ 代碼,最終編譯的代碼
    2. 其中 qmake 是老牌的Qt構建工具(默認選擇qmake使用即可
    3. CMake 并非Qt專屬,很多的開源項目都會使用CMake
  5. 其中關注:Base Class:使用Qt Creator 創建項目,會自動的生成一些代碼
    在這里插入圖片描述
    1. 生成的代碼就包含一個類
    2. 此處就是要選擇這個自動生成的類的父類
    3. 此處先選擇QWidget進行學習
    4. 其中 Class name 就是自己生成的類Base class 就是父類
      在這里插入圖片描述
    5. Qt 中內置的類都是以Q開頭
    6. 而下面的就是文件名,他和上面的類是關聯的(其中可以不一樣,但經量保持一致)
    7. Form file 非常關鍵: Qt中創建圖形化界面的程序,有兩種方式
      1. 直接通過c++代碼的方式創建界面
      2. 通過form file文件,以圖形化的方式來生成界面(此時就可以使用Qt Designer 或直接使用Qt Creator 來編輯這個 ui 文件,從而以圖形化的方式,快速方便的生成圖形化界面)
  6. 這里是選擇 翻譯文件(對應的語言)暫時不關注,它是和國際化相關的
    在這里插入圖片描述
  7. 選擇一下基于那個編譯器的Qt SDK 來構建后續代碼
    1. 就默認勾選 WinGW 就可以了
      在這里插入圖片描述
  8. 可以選擇版本控制工具(如git…)
    在這里插入圖片描述
  9. 最終完成就創建好了
  • 當創建好后,在左下角有運行按鈕(綠色三角):
    在這里插入圖片描述
    • 其中注意我們創建項目過程中的存儲路徑,不要有中文路徑!!
    • 最終就會構建出一個圖形化界面:
      在這里插入圖片描述

6. 認識界面及細節

在構建成功后,會自動生成main函數:

  • 其中main函數中有:

    1. 必備的 QApplication對象
    2. Widget對象,根據對象就是我們創建項目時選擇的QWidget
      在這里插入圖片描述
  • 構建后會生成,Widget.h類

    1. 其中Q_OBJECT 是一個Qt內置的宏(宏的本質上就是文本替換)
      • Q_OBJECT展開之后,就會生成一大堆代碼
      • Qt中有一個非常核心的機制,“信號” 和 “槽”
      • 如果這個類想使用 信號和槽 就需要引入這個宏!
    2. 其中構造函數中的 parent 參數:
      • 是一個引入的“對象樹”機制(后續細講)
      • 創建的Qt對象給掛到對象樹(N叉數)上
      • 往樹上掛的時候就需要指定 “父節點”
    3. UI::Widget* ui
      • 它和 Form file 密切相關
  • widget.cpp
    在這里插入圖片描述

  • form file

    • 當我們雙擊 ui 文件,此時 Qt Creator 就會調用Qt Designer,打開UI文件,圖形化的界面編輯器
      在這里插入圖片描述
    • 此時在點擊左側的編輯按鈕,就會 顯示 ui 文件的本題
    • 這個格式 也就是 xml 格式(和html類似,都是使用成對的標簽來表示數據)
    • xml 這里的標簽,有那些標簽有什么含義,都是程序員自己定義的(也就是qt開發的大佬們定義的),只用知道 ui 文件本質就是一個xml即可
    • 類似的就是自定義應用層協議
    • Qt 中使用 xml文件就是描述程序的界面是啥樣的,進一步的qmake會調用相關的工具,依據這個xml文件生成一些c++代碼,從而把完整的界面構造出來
      在這里插入圖片描述
  • .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細致內容,早關注不迷路。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82727.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82727.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI應用 Markdown 渲染對比與原生實現方案

DeepSeek、豆包、騰訊元寶、ChatGPT 渲染實現對比表 產品解析方式渲染引擎/庫UI 組件架構Markdown支持范圍流程圖/導圖支持擴展架構及裁剪流式解析渲染DeepSeek原生解析(非WebView)采用 CommonMark 標準解析器(推測使用 Markwon 庫&#xff…

Ubuntu20.04系統安裝,使用系統盤安裝

1、系統安裝 Ubuntu20.04系統安裝,使用系統盤安裝 查看ubuntu系統版本 lsb_release -a:顯示發行版名稱、版本號及代號 (base) rootai-System-Product-Name:/media/ai/wh/clash-for-linux-master# lsb_release -a No LSB modules are available. Distri…

(自用)Java學習-5.19(地址管理,三級聯動,預支付)

1. 地址管理模塊 地址展示 前端:通過 showAddress() 發起 Ajax GET 請求,動態渲染地址列表表格,使用 #{tag}、#{name} 等占位符替換真實數據。 后端: 控制器層調用 AddressService,通過 AddressMapper 查詢用戶地址數…

Spring 循環依賴:從原理到解決方案的全面解析

Spring 循環依賴:從原理到解決方案的全面解析 一、循環依賴的定義與分類 1. 什么是循環依賴? 在 Spring 框架中,循環依賴指的是多個 Bean 之間形成了依賴閉環。例如: Bean A 依賴 Bean BBean B 依賴 Bean CBean C 又依賴 Bean…

n 階矩陣 A 可逆的充分必要條件是 ∣ A ∣ ≠ 0

n 階矩陣 A 可逆的充分必要條件是 ∣ A ∣ ≠ 0 |A| \neq 0 ∣A∣0 的幾何意義 1. 行列式的幾何意義回顧 行列式 ∣ A ∣ |A| ∣A∣(或 det ? ( A ) \det(A) det(A))表示矩陣 A A A 所對應的線性變換對空間的體積縮放因子: ∣ A ∣ &…

Rockey Linux 安裝ffmpeg

1.環境準備 Rockey linux 9.2 ffmpeg 靜態資源包 這個是我自己的: https://download.csdn.net/download/liudongyang123/90920340https://download.csdn.net/download/liudongyang123/90920340 這個是官網的 Releases BtbN/FFmpeg-Builds GitHub 以上兩個資…

wordcount在集群上的測試

1.將louts.txt文件從cg計算機復制到master節點上面,存放在/usr/local/hadoop 需要輸入密碼:83953588abc scp /root/IdeaProjects/mapReduceTest/lotus.txt root172.18.0.2:/usr/local/hadoop /WordCountTest/input 2.將lotus.txt文件從master這臺機器…

AI+制造:中小企業的低成本智能化轉型

文章內容過長,可以考慮直接跳轉到文章末尾查看概要圖 在制造業競爭日益激烈的今天,中小企業正面臨著前所未有的挑戰:人力成本持續攀升、能源消耗居高不下、質量控制難度增加。與此同時,數字化轉型已成為行業共識,但高…

Linux C/C++編程 —— 線程技術總結

一、線程基本概念 線程是進程內的一個執行單元,多個線程共享進程的資源(如內存、文件描述符等),但每個線程擁有自己的寄存器、棧等。與進程相比,線程的創建、切換開銷較小,能更高效地利用 CPU 資源。 二、…

Femap許可證與網絡安全策略

隨著科技的快速發展,網絡安全問題已成為各行各業關注的焦點。在電磁仿真領域,Femap作為一款領先的軟件,其許可證的安全性和網絡策略的重要性不言而喻。本文將探討Femap許可證與網絡安全策略的關系,確保您的電磁仿真工作能夠在一個…

深度解析:SQLynx 如何筑牢數據庫安全防線?

在數據驅動業務發展的時代,數據庫作為企業核心資產的 “保險箱”,其安全性至關重要。一旦數據庫遭遇攻擊、數據泄露或被誤操作,將給企業帶來不可估量的損失。而 SQLynx 作為一款專注于數據庫安全管理的工具,憑借其多項創新技術與功…

更新時間相差8個小時

下面的java代碼在updateFill方法里面生成的modifiedTime時間是當前時間是正確的,為什么到service層testCommonFieldAutoUpdate方法里面去更新的時候modifiedTime就差8個小時呢?代碼如下所示: Slf4j Component public class MpMetaObjectHand…

Windows逆向工程提升之IMAGE_TLS_DIRECTORY

公開視頻 -> 鏈接點擊跳轉公開課程博客首頁 -> ???鏈接點擊跳轉博客主頁 目錄 TLS的作用 TLS的實現 靜態 TLS?? 動態 TLS?? 內部實現 回調機制 TLS Directory 的結構 TLS的作用 TLS (Thread Local Storage) 是一種用于為多線程應用程序提供線程獨立存儲空…

云效流水線Flow使用記錄

概述 最近在頻繁使用阿里云云效的幾款產品,如流水線。之前寫過一篇,參考云效流水線緩存問題。 這篇文章來記錄更多問題。 環境變量 不管是云效流水線Flow還是應用交付AppStack(基于流水線,后文不再贅述)&#xff0…

Android中獲取控件尺寸進階方案

在Android開發中,很多場景都需要獲取控件(View)的寬高信息,比如動態布局調整、動畫效果實現等。然而,直接在Activity的onCreate()中調用控件的getWidth()或getHeight()`方法,得到結果卻是0,因為控件還沒完成布局測量。 本文總結了幾種獲取控件大小的實用方法,并對各方…

android 輸入系統

一、輸入系統的核心角色與分層架構 Android 輸入系統的本質是橋梁:一端連接硬件驅動產生的原始事件,另一端將事件精準派發給應用窗口。整個過程涉及三層架構和多個關鍵組件,可類比為 “快遞分揀系統”: 1. 硬件與內核層&#xf…

ubuntu中,c和c+程序,預編譯、編譯、鏈接和運行命令

目錄 安裝編譯器一.c編譯運行(粗暴簡單)1.編寫 C 程序:2. 預處理:3.編譯:4. 匯編:5. 鏈接:6.運行 二.c編譯運行(粗暴簡單)1.編寫 C 程序:2.預處理&#xff1a…

【FastAPI】--2.進階教程(一)

【FastAPI】--基礎教程-CSDN博客 app.get和post的參數: 參數類型說明pathstr路由路徑(如 "/marks"),必填。response_modelType[T]定義響應數據的模型(如 percent),會自動校驗和序列…

KT6368A通過藍牙芯片獲取手機時間詳細說明,對應串口指令舉例

一、功能簡介 KT6368A雙模藍牙芯片支持連接手機,獲取手機的日期、時間信息,可以同步RTC時鐘 1、無需安裝任何app,直接使用系統藍牙即可實現 2、同時它不影響音頻藍牙,還支持一些簡單的AT指令進行操作 3、實現的方式&#xff1…

【平面波導外腔激光器專題系列】用于光纖傳感的低噪聲PLC外腔窄線寬激光器

----翻譯自Mazin Alalusi等人的文章 摘要 高性價比的 1550 nm DWDM平面外腔 &#xff08;PLANEX&#xff09; 激光器是干涉測量、布里淵、LIDAR 和其他光傳感應用的最佳選擇。其線寬<3kHz、低相位/頻率噪聲和極低的RIN。 簡介 高性能光纖分布式傳感技術是在過去幾年中開發…