Qt學習第一篇(windows下安裝和程式碼規範)

ivanlee717發表於2024-05-04

Qt_1

image-20240504092613869

Qt Creator 是 Qt 公司生產的 IDE。 它整合了多個工具,包括程式碼編輯器、圖形 UI(GUI)設計器、編譯器、偵錯程式、Qt 設計器、Qt 快速設計器和 Qt 助手等。

Qt Designer 幫助設計基於小部件的 GUI,而 Qt Quick Designer 提供了在設計模式下建立和編輯基於 QML 的 GUI 的 UI。 Qt 助手是一個整合的文件檢視器,只需按F1鍵即可開啟與給定 Qt 類或函式相關的內容。

image-20240504092922293

您可以在 UI 中看到以下 GUI 部分:

  1. IDE 選單欄:這為使用者提供了一個在視窗中查詢大多數特定於應用的功能的標準位置。 這些功能包括建立專案、開啟和關閉檔案、開發工具、分析選項、幫助內容以及退出程式的方式。
  2. 模式選擇器:此部分根據活動任務提供不同的模式。 歡迎按鈕提供開啟示例、教程、最近的課程和專案的選項。 編輯按鈕開啟程式碼視窗並幫助導航專案。 設計按鈕根據 UI 檔案的型別開啟 Qt Designer 或 Qt Quick Designer。 Debug提供了分析應用的選項。 Projects按鈕幫助管理專案設定,Help按鈕用於瀏覽幫助內容。
  3. 套件選擇器:這有助於選擇啟用的專案配置和更改套件設定。
  4. 執行按鈕:該按鈕在生成啟用專案後執行它。
  5. 除錯按鈕:這有助於使用偵錯程式除錯活動專案。
  6. 構建按鈕:該按鈕用於構建啟用的專案。
  7. Locator:用於從任何開啟的專案中開啟檔案。
  8. 輸出窗格:這包括幾個視窗,用於顯示編譯和應用輸出等專案資訊。 它還顯示構建問題、控制檯訊息以及測試和搜尋結果。
  9. 進度指示器:該控制元件顯示與正在執行的任務相關的進度。

Qt 是一個跨平臺的軟體開發框架,適用於桌面、嵌入式和移動平臺。 它遵循減少程式碼、建立更多程式碼並隨處部署的理念。 支援 Windows、Linux、MacOS、VxWorks、QNX、Android、iOS 等平臺。 軟體還支援恩智浦、瑞薩和意法半導體在裸機或 FreeRTOS 上執行的多個微控制器單元(MCU)。

Qt 誕生的初衷是試圖提供一個統一的圖形使用者介面(GUI),在不同的平臺上具有相同的外觀、感覺和功能。 Qt 透過提供一個只需編寫一次程式碼的框架來實現這一點,並確保它可以在其他平臺上執行,只需極少的修改或無需修改。 它不是一種程式語言,而是一個用 C++ 編寫的框架。 Qt 框架和工具在開源和商業許可下是雙重許可的。

Qt 6 中的一些基本修改概述如下:

  • 強型別簡介
  • JavaScript 作為Qt 建模語言(QML)的可選功能
  • 刪除 QML 版本控制
  • 消除 QObject 和 QML 之間的重複資料結構
  • 避免建立執行時資料結構
  • 將 QML 編譯為高效的 C++ 和本機程式碼
  • 支援隱藏實現詳細資訊
  • 更好地整合工具

構建一個簡單的 Qt 應用

一個helloworld命名的小應用的過程如下:

image-20240504113029188

image-20240504113051368

image-20240504113106945

預設情況下,將選擇Qt自己的構建系統qmake

image-20240504113132933

image-20240504113205381

需要注意的就是以上四步,這樣配置好之後一個簡單的頁面就出來了。

image-20240504113535676

這些程式碼都是預設生成好的,現在我們來認識一下這些語法是什麼。

初始Qt程式碼

#include "mainwindow.h"

#include <QApplication>
#include <QLocale>
#include <QTranslator>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTranslator translator;
    const QStringList uiLanguages = QLocale::system().uiLanguages();
    for (const QString &locale : uiLanguages) {
        const QString baseName = "helloworld_" + QLocale(locale).name();
        if (translator.load(":/i18n/" + baseName)) {
            a.installTranslator(&translator);
            break;
        }
    }
    MainWindow w;
    w.show();
    return a.exec();
}
  • Qt系統提供的類標頭檔案沒有.h字尾

  • Qt一個類對應一個標頭檔案,類名和標頭檔案名一致

  • QApplication應用程式類

    • 管理圖形使用者介面應用程式的控制流和主要設定。
    • 是Qt生命,一個程式要確保一直執行,就肯定至少得有一個迴圈,這就是Qt主訊息迴圈,在其中完成來自視窗系統和其它資源的所有事件訊息處理和排程。它也處理應用程式的初始化和結束,並且提供對話管理。
    • 對於任何一個使用Qt的圖形使用者介面應用程式,都正好存在一個QApplication 物件,不論這個應用程式在同一時刻有多少個視窗。
  • a.exec()

    • 程式進入訊息迴圈,等待對使用者輸入進行響應。這裡main()把控制權轉交給Qt,Qt完成事件處理工作,當應用程式退出的時候exec()的值就會返回。在exec()中,Qt接受並處理使用者和系統的事件並且把它們傳遞給適當的視窗部件
  1. QTranslator translator;:建立了一個 QTranslator 型別的物件 translator,用於載入和管理翻譯檔案。
  2. const QStringList uiLanguages = QLocale::system().uiLanguages();:獲取系統當前支援的介面語言列表,並儲存在 uiLanguages 中,它是一個 QStringList 物件。
  3. for (const QString &locale : uiLanguages) {:遍歷系統支援的介面語言列表。
  4. const QString baseName = "helloworld_" + QLocale(locale).name();:構建翻譯檔案的基本名稱。QLocale(locale).name() 獲取當前語言的標準名稱,然後與 "helloworld_" 相連線,形成基本名稱。
  5. if (translator.load(":/i18n/" + baseName)) {:嘗試載入翻譯檔案。":/i18n/" + baseName 是翻譯檔案的路徑。
  6. a.installTranslator(&translator);:如果成功載入翻譯檔案,則將該翻譯檔案安裝到應用程式中,以便進行介面文字的翻譯。a 是你的應用程式物件。

.pro檔案

image-20240504121131499

.pro就是工程檔案(project),它是qmake自動生成的用於生產makefile的配置檔案。類似於VS中的.sln 和vsproj檔案

image-20240504121853490

  • 模組引入

    QT += 模組名,表示當前專案引入Qt哪些模組。

    引入模組的意思就簡單理解為引入C/C++標頭檔案搜尋路徑,如果沒引入對應模組就使用該標頭檔案的話會報錯說找不到該標頭檔案。當然不必要的模組還是別引入,因為引入模組不僅僅是引入標頭檔案搜尋路徑那麼簡單,還包括引入連線的庫等一系列操作,會讓程式變臃腫。

  • 模板變數告訴qmake為這個應用程式生成哪種makefile。下面是可供使用的選擇:TEMPLATE = app

    • app -建立一個應用程式的makefile。這是預設值,所以如果模板沒有被指定,這個將被使用。

    • lib - 建立一個庫的makefile。

    • vcapp - 建立一個應用程式的VisualStudio專案檔案。

    • vclib - 建立一個庫的VisualStudio專案檔案。

    • subdirs -這是一個特殊的模板,它可以建立一個能夠進入特定目錄並且為一個專案檔案生成makefile並且為它呼叫make的makefile。

  • 指定生成的應用程式名:

    TARGET = QtDemo

  • 工程中包含的標頭檔案

    HEADERS += include/painter.h

  • 工程中包含的.ui設計檔案

    FORMS += forms/painter.ui

  • 工程中包含的原始檔

    SOURCES += sources/main.cpp sources

    • 工程中包含的資原始檔

    RESOURCES += qrc/painter.qrc

  • greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

    這條語句的含義是,如果QT_MAJOR_VERSION大於4(也就是當前使用的Qt5及更高版本)需要增加widgets模組。如果專案僅需支援Qt5,也可以直接新增“QT += widgets”一句。不過為了保持程式碼相容,最好還是按照QtCreator生成的語句編寫。**

  • 配置資訊

    CONFIG用來告訴qmake關於應用程式的配置資訊。

    CONFIG += c++11 //使用c++11的特性(qt5.6以上版本預設使用C++11)

    在這裡使用“+=”,是因為我們新增我們的配置選項到任何一個已經存在中。這樣做比使用“=”那樣替換已經指定的所有選項更安全。

執行過程

用ctrl+R進行執行就可以初步實現一個介面框。image-20240504151316973

QtCreator常用快捷鍵

執行 ctrl +R

編譯 ctrl +B

幫助文件 F1 ,點選F1兩次跳到幫助介面

跳到符號定義 F2 或者ctrl + 滑鼠點選

註釋 ctrl+/

字型縮放 ctrl + 滑鼠滾輪

整行移動程式碼 ctrl + shift + ↑或↓

自動對齊 ctrl + i

同名之間的.h和.cpp檔案跳轉 F4

相關文章