?前言
qt之路正式開啟💓 個人主頁:普通young man-CSDN博客
? 文章專欄:C++_普通young man的博客-CSDN博客
? 本人giee: ? 普通小青年 (pu-tong-young-man) - Gitee.com
? ? ? 若有問題 評論區見📝
🎉歡迎大家點贊👍收藏?文章
————————————————
目錄
Qt 框架詳解
Qt 是什么
發展歷程
支持平臺與版本
優點
發展前景
成果
搭建 Qt 開發環境
開發工具介紹
Qt SDK 下載與安裝
安裝SDK
環境變量配置
為什么要設置環境變量
環境變量是什么
以 path 環境變量為例
設置 Qt 環境變量的目的
深入了解 Qt Creator
界面概覽
Qt Creator 新建項目+創建文件+界面介紹
Qt HelloWorld程序
用label控件打印
????????可視化操作實現
????????純代碼方式
下面我對這個代碼進行一個詳細的讀:?編輯
?????????可視化操作實現
? ? ? ? 純代碼方式
項目文件解析
.pro?文件的作用
widget.h?文件的作用
main.cpp?文件的作用
widget.cpp?文件的作用
widget.ui
XML 與 HTML 的主要區別
Qt Creator 快捷鍵表
查閱文檔
對象樹
?編輯
1. QObject 的對象樹
2. QWidget 的繼承關系
3. 內存管理的優勢
代碼舉例
字符編碼解析:避免亂碼
坐標
Qt 框架詳解
Qt 是什么
Qt 是跨平臺的 C++ 圖形用戶界面應用程序框架,為開發者提供構建優質圖形界面的全套功能。它完全面向對象,易于擴展,支持組件式開發模式,開發者既能通過拖拽組合快速搭建應用,也能用 C++ 進行深度開發。圖形用戶界面作為人與計算機交互的關鍵接口,在各類設備中至關重要,而 Qt 正是打造這些界面的得力工具12。
發展歷程
Qt 的發展歷程豐富多樣,1991 年由奇趣科技創立,1996 年進入商業領域,成為 Linux 桌面環境 KDE 的基石。此后,歷經諾基亞、Digia 公司收購,不斷演進。2014 年,Qt Creator 3.1.0 和 Qt 5.3 正式版發布,標志著 Qt 全面支持 iOS、Android 等多平臺,功能更加完善
支持平臺與版本
Qt 支持的平臺廣泛,涵蓋 Windows、Unix/X11、Macintosh、Embedded 以及 Android 等。目前最新版本是 Qt 6,但考慮到企業中大量項目仍在使用 Qt 5,且兩者核心功能差異不大,學習時選用 Qt 5 更具實用性。Qt 發布時提供商業許可和開源許可,開發者可按需選擇
優點
- 跨平臺特性顯著,能適配幾乎所有主流平臺。
- 接口設計簡潔,易于上手,并且對學習其他框架具有借鑒意義。
- 簡化了內存回收機制,開發效率高,可快速構建應用程序。
- 社區活躍,市場份額穩步上升,同時還支持嵌入式開發。
發展前景
隨著物聯網、自動駕駛、游戲開發等行業的蓬勃發展,Qt 的重要性日益凸顯。在物聯網和嵌入式系統中,Qt 可開發帶 GUI 的嵌入式應用,用于智能家居、汽車、醫療設備等領域;自動駕駛和智能交通領域,Qt 能開發車載嵌入式系統和用戶界面程序;游戲開發方面,Qt 的 Qt 3D Studio 等功能模塊大有用武之地。從就業角度看,Qt 開發人員需求持續增長,就業機會多、薪資可觀、職業發展前景良好
成果
Linux桌面環境KDE
WPS Office
Google Earth
VLC 播放器
VirtualBox虛擬機軟件(VirtualBox號稱是最強的免費虛擬機軟件)
搭建 Qt 開發環境
開發工具介紹
Qt 開發工具多樣,常用的有 Qt Creator、Visual Studio 和 Eclipse。Qt Creator 專為 Qt 開發設計,是輕量級跨平臺集成開發環境(IDE),集成了可視化界面設計器、代碼編輯器、調試工具等,功能強大且易用,后續學習將以它為主。Visual Studio 由微軟開發,可開發多種類型應用,支持多種編程語言,功能豐富。Eclipse 是跨平臺自由 IDE,最初用于 Java 開發,通過插件也能用于 Qt 開發
Qt SDK 下載與安裝
Qt SDK 可從官方網站(Index of /archive/qt)或國內清華源(Index of /qt/archive/qt/ | 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror?)下載。以 5.14 版本為例,下載時需按步驟選擇版本、操作系統對應的安裝文件。安裝過程中,要注意斷網安裝可跳過注冊登錄步驟;安裝路徑不能含中文;根據磁盤空間選擇安裝組件,若空間充足建議全選。安裝完成后,可通過運行示例程序驗證安裝是否成功
安裝SDK
環境變量配置
配置 Qt 環境變量是為了在命令行或其他應用中能直接訪問 Qt 相關命令和工具。找到 Qt 安裝路徑下的 “bin” 目錄,將其添加到系統環境變量中。具體操作是在 “此電腦” 右鍵選擇 “屬性”,進入 “高級系統設置” 的 “環境變量” 進行添加。
為什么要設置環境變量
環境變量是什么
環境變量就像是城市里一些特殊的索引標記。在計算機這個 “城市” 里,應用程序運行的時候常常需要一些特定的信息,這些信息就放在環境變量里。好比店鋪可能需要知道附近倉庫的位置,這個位置信息就可以看作是環境變量里的內容。
以 path 環境變量為例
就拿 Windows 和 DOS 系統里的 path 環境變量來說吧。當你要在這個 “城市” 里找一家特定的 “店鋪”(也就是運行一個程序),但又沒告訴計算機具體位置(沒給完整路徑)時,計算機不會只在你當前站的地方(當前目錄)找,它還會去 path 這個 “地圖索引” 里標記的地方找。比如說,path 里標記了好幾個街區,計算機就會去這些街區挨個找你要的 “店鋪”。
設置 Qt 環境變量的目的
在 Windows 系統上設置 Qt 的環境變量,就相當于在城市的 “地圖索引” 里專門標記出 Qt 相關 “店鋪”(命令和工具)的位置。這樣一來,不管你是在街道上(命令行)溜達,還是在其他大樓(其他應用程序)里,都能快速找到這些 Qt 的 “店鋪”,直接去使用里面的東西,不用每次都費勁去記具體位置再去找啦。
深入了解 Qt Creator
界面概覽
類別 詳情 菜單欄 1. 文件:新建、打開、關閉項目和文件、打印、退出等基本功能
2. 編輯:撤銷、剪切、復制、查找、選擇編碼等功能
3. 構建:構建和運行項目等相關功能
4. 調試:調試運行項目等相關功能
5. Analyze:QML 分析器、Valgrind 內存和功能分析器等相關功能
6. 工具:快速定位菜單、外部工具菜單等,包含環境、文本編輯器、幫助、構建和運行、調試器、版本控制等設置選項
7. 控件:設置窗口布局的菜單,如全屏顯示、隱藏邊欄功能等
8. 幫助:Qt 幫助、Qt Creator 版本信息、報告 bug、插件管理等菜單模式選擇 1. 歡迎模式:功能快捷入口(打開幫助教程、示例程序、項目,新建項目,快速打開以前項目和會話,聯網查看 Qt 官方論壇和博客等),示例頁面有大量示例程序及搜索欄,教程頁面有英文視頻教程資源
2. 編輯模式:查看和編輯程序代碼、管理項目文件,編輯器有關鍵字特殊顏色顯示、代碼自動補全、聲明定義快捷切換、函數原型提示、F1 鍵快速打開相關幫助、全項目查找等功能,可在 “工具→選項” 設置編輯器
3. 設計模式:整合 Qt Designer 功能,可設計圖形界面,進行部件屬性、信號和槽、布局設置等操作
4. 調試模式:支持設置斷點、單步調試、遠程調試等功能,有局部變量和監視器、斷點、線程、快照等查看窗口
5. 項目模式:包含特定項目的構建設置(項目版本、Qt 版本、編譯步驟)、運行設置、編輯器設置(文件默認編碼)、代碼風格設置、依賴關系等頁面
6. 幫助模式:整合 Qt 助手,有目錄、索引、查找、書簽等導航模式,可查看 Qt 和 Qt Creator 各方面信息構建套件選擇器 1. 目標選擇器:選擇構建項目、使用的 Qt 庫,適用于多個 Qt 庫的項目,可選擇編譯項目的 debug 或 release 版本
2. 運行按鈕:實現項目的構建和運行
3. 調試按鈕:實現項目的調試
4. 構建按鈕:完成項目的構建歡迎模式下的窗口工作方式 1. Project:新建工程、打開工程
2. 示例:Qt 官方的一些示例
3. 教程:Qt 官方教程定位器 快速定位項目、文件、類、方法、幫助文檔、文件系統,可使用過濾器準確定位查找結果 輸出窗格 1. 問題:顯示程序編譯時的錯誤和警告信息(快捷鍵 Alt+1)
2. Search Results:顯示執行搜索操作后的結果信息(快捷鍵 Alt+2)
3. 應用程序輸出:顯示應用程序運行過程中輸出的所有信息(快捷鍵 Alt+3)
4. 編譯輸出:顯示程序編譯過程輸出的相關信息(快捷鍵 Alt+4)
5. Debugger Console:調試器控制臺相關輸出(快捷鍵 Alt+5)
6. 概要信息:顯示相關概要內容(快捷鍵 Alt+6)
7. 測試結果(Test Results):展示測試結果信息(快捷鍵 Alt+7)會話記錄 可對會話進行管理(包括 Clone),未打開工程時顯示最后一次打開的(會話)工程,已打開則顯示當前的會話(工程) 新建項目 可進行項目的新建操作 打開已有項目 用于打開已存在的項目
Qt Creator 新建項目+創建文件+界面介紹
新建項目對話框里有五類項目模板:
Application | Qt 應用程序,涵蓋普通窗體程序和 QtQuick 程序 |
Library | 能夠創建動態庫、靜態庫,以及 QtQuick 擴展插件、QtCreator 自身插件 |
其他項目 | 可創建單元測試項目、Qt4 設計師自定義控件、子目錄項目等 |
Non-Qt-Project | 非 Qt 項目,可創建純 C 或純 C++ 項目 |
Import Project | 導入項目,用于從版本控制系統管理的軟件項目中導入舊的項目 |
常用的只有第?類 Application,選擇它,在右側會看到 Qt應?程序的五個子模板:
Qt Widgets Application | 普通窗體模板,屬于傳統基于部件的窗體界面程序 |
Qt Console Application | Qt 控制臺應用程序,由于 Qt 主要用于圖形界面設計,該控制臺項目模板基本不使用 |
Qt for Python | 在 Python 下以 LGPL 的許可來開發閉源 Qt 軟件 |
Qt Quick Application | Qt 提供的一種高級用戶界面技術,便于快速為移動以及嵌入式設備開發流暢美觀的用戶界面。Qt Quick 模塊是開發 QML 應用的標準庫,涵蓋可視化、交互、動畫、模型、視圖、粒子效果以及著色效果等創建用戶界面所需的一切 |
后續操作:
構建工具 簡介 特點 相關文件 / 系統 與 Qt 關系 qmake 是一個構建工具,用于自動生成 makefile 文件 支持跨平臺構建 編輯后綴名為.pro 的文件 Qt 自帶的構建工具 CMake 是一個跨平臺的構建工具,本身不是編譯器,是生成讓編譯器能讀懂編譯流程文件的工具 能自動生成構建系統,如 Makefile 和 Visual Studio 項目文件 生成相關構建系統文件 第三方工具,有自己的文檔 Qbs(Qt Build Suite:Qt 構建套件) 同 qmake、CMake 一樣是構建工具 號稱是新一代的構建工具,比 qmake 編譯速度更快,從項目文件的高級項目描述中生成正確的依賴表 無特定文件類型描述,生成依賴表 沒有綁定 Qt 版本,可獨立使用
基類 說明 QMainWindow 主窗口類,用于復雜應用程序,包含中央客戶區、菜單欄、工具欄、狀態欄及多個可停靠工具對話框 QWidget 最基礎的窗體類,可放置多個控件實現功能,適合簡單界面程序 QDialog 基于對話框的程序,支持模態顯示和返回值,常用于彈窗或主界面(繼承自 QWidget) ![]()
選擇的語言是"漢語","英語"這樣的語言.而不是"編程語?"
默認情況下,系統僅提供第一個 “Desktop Qt 5.14.2 MinGW 64-bit” 選項。若用戶安裝并配置了多個 Qt 套件,在相應操作中則可將所有套件納入選擇范圍。
Qt 套件是一套完整的集合,涵蓋了 Qt 程序從編譯鏈接直至運行環境所需的全部工具,以及 Qt 類庫。以 MinGW 版本的 Qt 程序為例,在生成與調試過程中,至少需要以下組件:MinGW 中的編譯器 g++(其會自動調用鏈接器)、與 g++ 相配套的基礎庫、調試器 gdb,還有利用 MinGW 環境編譯而成的 Qt 類庫本身。通常建議在 “Kit Selection” 中,將所有可用套件全部選中,以確保程序開發與運行的全面支持。
序號 窗口名稱 詳情 ① 組件選擇窗口 分為多個組,如 Layouts、Buttons、Display Widgets 等,可找到界面設計的常見組件 ② UI 設計窗口 從組件選擇窗口拖放組件到該窗口的窗體上,實現組件放置 ③ 動作編輯窗口 包含 Action Editor 和 Signals 及 Slots 編輯器。Action Editor 用于新建 Action 并添加到菜單欄和工具欄;Signals 和 Slots 編輯器用于可視化關聯信號與槽 ④ 對象瀏覽窗口 以樹狀視圖展示窗體上各組件的布局包含關系,視圖有兩列,分別顯示組件的對象名稱(ObjectName)和類名稱 ⑤ 屬性設置窗口 顯示選中組件或窗體的各種屬性及其取值,可在窗口中修改屬性值
模式 說明 Debug 以 “-g” 模式編譯,編譯時帶有符號信息,其優點是便于程序調試 Profile 處于 “Debug” 和 “Release” 之間的一種模式,兼顧性能和調試,可近似看作是性能更優且方便調試的版本 Release 經過優化處理,在性能方面相比 “Debug” 模式更上一個檔次
Qt HelloWorld程序
用label控件打印
????????可視化操作實現
這個操作很簡單:
這就是利用圖形界面進行打印helloworld
????????純代碼方式
這里為什么不直接構造對象?而是要new一個,這是因為直接構造他是創建到棧中,而new是創建到堆中,QT建議用new一個對象的方式
其實這也與他們的生命周期不同,創建到棧上離開特定的作用域就銷毀了,但是如果創建到堆中生命周期一直到程序結束析構或則delete,這也去確保了qt中信號槽機制一直保持有效
下面我對這個代碼進行一個詳細的讀:

這邊你輸入QLabel的時候會出現兩個文件,一個沒有.h,一個有.h,這個qlabel.h是一個qt的一個上古文件,如果學習c++的都知道什么是向前兼容,后面c++98更新后到c++11,然后命名方式就變成不要.h后綴,其實也就是在上面封裝了一層,但是這里的標準肯定和遠古文件的文件是不一樣的
setText的參數是QString,這是由于c++中的string不要用,而且經常被罵,然后又不進行優化,所以qt就專門自己搞了一個QString,和String的用法插不多,除了QString,還有很多容器,qt都自己弄了一套輪子
利用push_button來實現helloworld
?????????可視化操作實現
對這個控件玩一些qt中的信號槽機制,這里我就不用圖形化界面,來演示這個幸信號槽機制,直接上代碼:
? ? ? ? 純代碼方式
純代碼方式直接通過new來創建對象
大家自己悟,我就不說太多了
項目文件解析
在Qt開發環境中,
.pro
文件扮演著非常重要的角色。它是項目文件(Project File),由qmake工具自動生成,主要用于生成Makefile文件。Makefile文件是編譯系統用來編譯和鏈接代碼的腳本。下面是對.pro
文件的一些關鍵點進行整理:
.pro
?文件的作用
- 配置項目:
.pro
文件包含了項目的配置信息,如源文件、頭文件、資源文件的位置,以及需要包含的庫和編譯選項等。- 生成Makefile:通過解析
.pro
文件,qmake可以生成適用于不同平臺的Makefile文件,從而簡化了跨平臺開發的復雜性。- 支持多種平臺:由于
.pro
文件是與平臺無關的,因此可以在不同的操作系統上使用相同的項目文件,只需要調整少量的配置即可。# 定義項目模板為應用程序 TEMPLATE = app# 指定源文件 SOURCES += main.cpp \otherfile.cpp# 指定頭文件 HEADERS += otherfile.h# 添加資源文件 RESOURCES += application.qrc# 設置額外的包含路徑 INCLUDEPATH += /path/to/include# 鏈接外部庫 LIBS += -L/path/to/lib -llibname# 設置編譯器標志 QMAKE_CXXFLAGS += -Wall -O2
比如那剛才的helloworld舉例:
widget.h
?文件的作用
- 類聲明:定義了一個繼承自?
QWidget
?或其子類的自定義類。- 信號與槽機制:通過?
Q_OBJECT
?宏啟用信號與槽機制,支持事件處理。- UI 組件訪問:使用?
Ui::Widget
?命名空間中的?Widget
?類來訪問通過 Qt Designer 設計的界面組件。//防止重復包含頭文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget>// 引入生成的 UI 頭文件 #include "ui_widget.h"class Widget : public QWidget {Q_OBJECT // 必須包含此宏以支持信號與槽機制public:explicit Widget(QWidget *parent = nullptr); // 構造函數~Widget(); // 析構函數private slots:// 這里可以聲明槽函數,用于響應信號void on_pushButton_clicked(); // 示例槽函數private:Ui::Widget *ui; // 指向生成的 UI 類實例,用于訪問界面上的組件 };#endif // WIDGET_H
部分 描述 防止重復包含 使用預處理器指令? #ifndef
,?#define
, 和?#endif
?來防止頭文件被多次包含,確保編譯器不會重復處理相同的代碼。包含必要的頭文件 -? #include <QWidget>
引入 Qt 的基礎窗口部件類。 -? #include "ui_widget.h"
引入由 Qt Designer 自動生成的 UI 頭文件,其中包含了所有設計好的界面組件的聲明。 Q_OBJECT 宏 在類聲明中必須包含? Q_OBJECT
?宏,以啟用信號與槽機制。這個宏允許類使用?signals
?和?slots
?關鍵字,并且讓 qmake 工具能夠識別并生成必要的元對象代碼。構造函數和析構函數 -? explicit Widget(QWidget *parent = nullptr);
構造函數,接受一個可選的父對象指針,默認為? nullptr
。-? ~Widget();
析構函數,用于釋放資源。 私有槽函數 在? private slots:
?部分聲明槽函數,這些函數將響應特定的信號。例如,void on_pushButton_clicked();
?是一個示例槽函數,它會在按鈕點擊時被調用。UI 組件訪問指針 Ui::Widget *ui;
:這是一個指向由 Qt Designer 生成的?Ui::Widget
?類實例的指針。通過這個指針,你可以訪問界面上的所有組件。例如,如果你有一個按鈕?pushButton
,可以通過?ui->pushButton
?來訪問它。
main.cpp
?文件的作用
- 應用程序初始化:創建一個?
QApplication
?對象,它是所有 Qt 應用程序的基礎,負責管理事件循環、應用程序級別的設置等。- 主窗口或小部件的創建與顯示:實例化并顯示自定義的小部件(如?
Widget
)。- 事件循環啟動:調用?
QApplication::exec()
?啟動應用程序的主事件循環,等待用戶交互。#include "widget.h" // 包含自定義小部件的頭文件 #include <QApplication> // 包含 QApplication 類的頭文件int main(int argc, char *argv[]) {QApplication a(argc, argv); // 創建 QApplication 對象,argc 和 argv 是命令行參數Widget w; // 創建自定義小部件對象w.show(); // 顯示小部件return a.exec(); // 進入應用程序的主事件循環 }
包含必要的頭文件:
#include "widget.h"
:引入自定義的小部件類聲明。#include <QApplication>
:引入 Qt 的?QApplication
?類,用于管理應用程序的全局設置和事件循環。
main
函數:
int main(int argc, char *argv[])
:這是 C++ 程序的入口函數,argc
?和?argv
?分別是命令行參數的數量和值列表。創建
QApplication
對象:
QApplication a(argc, argv);
:創建一個?QApplication
?對象,它管理應用程序的資源和事件循環。每個 Qt 應用程序必須且只能有一個?QApplication
?實例。創建并顯示自定義小部件:
Widget w;
:創建自定義的小部件對象(假設你的小部件類名為?Widget
)。w.show();
:調用?show()
?方法顯示小部件。如果沒有這一步,小部件不會出現在屏幕上。進入事件循環:
return a.exec();
:調用?QApplication::exec()
?方法進入應用程序的主事件循環。這個方法會阻塞直到應用程序退出(例如,用戶關閉了所有窗口)。返回值是應用程序的退出代碼。
widget.cpp
?文件的作用
- 實現類的成員函數:提供在頭文件中聲明的成員函數的具體實現。
- 設置 UI 組件:初始化用戶界面組件,并將信號與槽進行連接。
- 處理業務邏輯:實現應用程序的核心功能,如響應用戶交互、數據處理等。
#include "widget.h" #include <QMessageBox> // 如果需要使用消息框// 構造函數實現 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); // 設置 UI 組件// 連接信號與槽connect(ui->pushButton, &QPushButton::clicked, this, &Widget::on_pushButton_clicked); }// 析構函數實現 Widget::~Widget() {delete ui; // 釋放 UI 組件 }// 槽函數實現 void Widget::on_pushButton_clicked() {QMessageBox::information(this, tr("提示"), tr("按鈕被點擊了!")); }
包含必要的頭文件:
#include "widget.h"
:引入自定義小部件類的聲明。#include <QMessageBox>
:如果需要使用 Qt 提供的消息框,需引入相應的頭文件。構造函數實現:
Widget::Widget(QWidget *parent)
:構造函數的實現,接受一個可選的父對象指針,默認為?nullptr
。ui(new Ui::Widget)
:初始化?ui
?成員變量,指向由 Qt Designer 自動生成的 UI 類實例。ui->setupUi(this)
:調用?setupUi()
?方法來設置 UI 組件,確保設計好的界面能夠在程序運行時正確顯示。析構函數實現:
Widget::~Widget()
:析構函數的實現,用于釋放資源。delete ui
:釋放?ui
?成員變量所占用的內存。信號與槽的連接:
- 使用?
connect()
?函數將信號與槽進行連接。例如,將按鈕點擊信號?QPushButton::clicked
?與槽函數?on_pushButton_clicked
?進行連接。- 示例中的槽函數會在按鈕點擊時彈出一個信息框。
槽函數實現:
void Widget::on_pushButton_clicked()
:槽函數的實現,具體處理按鈕點擊事件。QMessageBox::information()
:顯示一個信息框,通知用戶按鈕已被點擊。
widget.ui
這個我就不做過多解釋,只是解釋一下html和xml:
XML 與 HTML 的主要區別
特性 XML HTML 用途 存儲和傳輸數據 創建和展示網頁內容 標簽 用戶自定義標簽 固定的預定義標簽 語法嚴格性 必須正確閉合標簽,遵循嚴格的語法規則 標簽不閉合也可以正常顯示,語法規則較寬松 顯示導向 不直接涉及內容的顯示 直接控制內容的布局和顯示 錯誤處理 對錯誤敏感,解析器遇到錯誤會停止解析 瀏覽器通常會嘗試糾正錯誤并繼續解析 數據模型 樹狀結構,適合表示復雜的數據關系 線性結構,主要用于文本和多媒體內容展示
- XML?XML 是一種用于存儲和傳輸數據的標記語言。它被設計成一種靈活的語言,允許用戶定義自己的標簽來描述數據結構。
- HTML?是一種用于創建網頁的標準標記語言。它定義了網頁的結構和內容,并通過瀏覽器呈現給用戶。
最后給大家展示這些文件的一個關聯圖:
當我們創建一個對象控件,他會有一個objectname
這個name會純在與一個.h文件中,也就是我們主程序的聲明文件,在這個項目文件中的上一級別目錄:
Qt Creator 快捷鍵表
功能 | 快捷鍵 | 描述 |
---|---|---|
注釋/取消注釋 | Ctrl + / | 快速注釋或取消注釋選中的代碼行或當前行。 |
運行項目 | Ctrl + R | 編譯并運行當前項目。 |
編譯項目 | Ctrl + B | 僅編譯當前項目,不運行。 |
字體縮放 | Ctrl + 鼠標滑輪 | 使用鼠標滑輪調整編輯器中的字體大小。 |
查找 | Ctrl + F | 在當前文件中查找指定的文本。 |
整行移動 | Ctrl + Shift + ↑/↓ | 向上或向下移動當前選中的行或光標所在的行。 |
幫助文檔 | F1 | 顯示當前光標所在位置的相關幫助文檔。 |
自動對齊 | Ctrl + I | 自動格式化當前文件中的代碼,使其符合代碼風格規范。 |
切換頭文件和源文件 | F4 | 在同名的?.h ?和?.cpp ?文件之間快速切換。 |
生成函數聲明的定義 | Alt + Enter | 在頭文件中聲明函數后,使用此快捷鍵在對應的源文件中自動生成函數定義。 |
查閱文檔
這里做一個提醒:
大家不要看中文文檔,養成一個閱讀英文文檔的一個習慣,因為不是什么都會有教程的
對象樹
對象樹其實就是一顆N插樹
1. QObject 的對象樹
- parent 指針的作用
每個 QObject 對象在創建時可以指定一個父對象(parent 指針),該對象會自動添加到父對象的children()
列表中。- 內存管理
當父對象被析構時,其所有子對象也會被自動析構。這確保了子對象的生命周期與父對象綁定,避免內存泄漏。
- 示例:若按鈕(Button)的父對象是對話框(Dialog),當對話框關閉時,按鈕會自動銷毀。
- 關鍵特性
- 父對象并非繼承意義上的父類,而是對象樹中的層級關系。
- 子對象可通過
parent()
方法訪問父對象,父對象可通過children()
方法獲取所有子對象。
2. QWidget 的繼承關系
- QWidget 的特性
QWidget 是所有可見 UI 組件的基類,繼承自 QObject,因此也繼承了對象樹機制。
- 子組件的顯示:子組件會顯示在父組件的坐標系統內,并被父組件的邊界剪裁。
- 自動布局調整:當父組件大小變化時,子組件會根據布局規則自動調整位置和大小。
- 典型應用場景
- 對話框(QDialog)中的按鈕(QPushButton)作為子組件,隨對話框銷毀而銷毀。
- 工具欄(QToolBar)作為主窗口(QMainWindow)的子組件,刪除工具欄時主窗口會自動更新布局。
3. 內存管理的優勢
- 自動內存回收
- 父對象析構時,遞歸銷毀所有子對象。
- 手動刪除子對象時,會自動從父對象的
children()
列表中移除。- 避免重復刪除
Qt 確保每個 QObject 對象僅被刪除一次,由析構順序保證。
核心概念 說明 parent 指針 定義對象樹層級關系,父對象析構時自動銷毀子對象,簡化內存管理。 QObject 樹 所有 QObject 對象通過 parent 指針形成樹形結構,確保資源自動釋放。 QWidget 繼承 可視化組件繼承 QObject 的對象樹機制,實現 UI 組件的父子關系與布局管理。
代碼舉例
我們自己封裝一個自己得類,用QLabel來構造,這樣就可以看到他構造和銷毀得過程
字符編碼解析:避免亂碼
- GBK:采用雙字節編碼,即每個字符用 2 個字節來表示,但對于 ASCII 碼中的字符,仍然使用單字節表示,與 ASCII 碼兼容。這樣可以在處理英文等字符時保持高效性,同時又能支持大量的漢字等中文符號。
- UTF-8:是一種變長編碼,它可以使用 1 到 4 個字節來表示一個字符。對于 ASCII 碼中的字符,UTF-8 使用 1 個字節表示,與 ASCII 碼完全兼容;對于常用的漢字等字符,一般使用 3 個字節表示;對于一些生僻字符或特殊符號,可能會使用 4 個字節
UTF-8這個可以在Linux中驗證字節數:
編譯后:
如果你出現了cout輸出時候亂碼,可能就是你用了GBK或則UTF-8,匹配得是GBK:UTF-8,UTF-8 :GBK,他們編碼規則不同如果去匹配就會出錯,這邊可以通過項目目錄去查看當前得文件得編碼規則是什么
坐標
坐標體系:以左上?為原點(0,0),X向右增加,Y向下增加。
其實這個很簡單得,只要你接觸一點前端都知道,qt中得接口也非常得好讀,用起來簡單