QT入門

checha發表於2024-07-11

1 QT概述

1.1 什麼是QT

是一個跨平臺的C++應用程式開發框架
具有短平快的優秀特質: 投資少、週期短、見效快、效益高
幾乎支援所有的平臺, 可用於桌面程式開發以及嵌入式開發
有屬於自己的事件處理機制
可以搞效率的開發基於視窗的應用程式。
Qt是標準 C++ 的擴充套件, C++的語法在Qt中都是支援的
良好封裝機制使得 Qt 的模組化程度非常高,可重用性較好,可以快速上手。
Qt 提供了一種稱為 signals/slots 的安全型別來替代 callback(回撥函式),這使得各個元件 之間的協同工作變得十分簡單。

1.2 Qt的特點

廣泛用於開發GUI程式,也可用於開發非GUI程式。
GUI = Graphical User Interface
也就是基於視窗的應用程式開發。
有豐富的 API
Qt 包括多達 250 個以上的 C++ 類
可以處理正規表示式。
支援 2D/3D 圖形渲染,支援 OpenGL
Qt給程式猿提供了非常詳細的官方文件
支援XML,Json
框架底層模組化, 使用者可以根據需求選擇相應的模組來使用
可以輕鬆跨平臺
和Java的跨平臺方式不同
在不同的平臺使用的是相同的上層介面,但是在底層封裝了不同平臺對應的API(暗度陳倉)。

1.3 Qt中的模組

Qt 基本模組(Qt Essentials):提供了 Qt 在所有平臺上的基本功能。
Qt 附加模組(Qt Add-Ons):實現一些特定功能的提供附加價值的模組。
增值模組(Value-AddModules):單獨釋出的提供額外價值的模組或工具。
技術預覽模組(Technology Preview Modules):一些處於開發階段,但是可以作為技術預覽使用的模組。
Qt 工具(Qt Tools):幫助應用程式開發的一些工具。

模組 描述
Qt Core Qt 類庫的核心,所有其他模組都依賴於此模組
Qt GUI 設計 GUI 介面的基礎類,包括 OpenGL
Qt Multimedia 音訊、影片、攝像頭和廣播功能的類
Qt Multimedia Widgets 實現多媒體功能的介面元件類
Qt Network 使網路程式設計更簡單和輕便的類
Qt QML 用於 QML 和 JavaScript語言的類
Qt Quick 用於構建具有定製使用者介面的動態應用程式的宣告框架
Qt Quick Controls 建立桌面樣式使用者介面,基於 Qt Quick 的使用者介面控制元件
Qt Quick Dialogs 用於 Qt Quick 的系統對話方塊型別
Qt Quick Layouts 用於 Qt Quick 2 介面元素的佈局項
Qt SQL 使用 SQL 用於資料庫操作的類
Qt Test 用於應用程式和庫進行單元測試的類
Qt Widgets 用於構建 GUI 介面的 C++ 圖形元件類

1.4 Qt案例

VirtualBox:虛擬機器軟體。
VLC多媒體播放器:一個體積小巧、功能強大的開源媒體播放器。
YY語音:又名“歪歪語音”,是一個可以進行線上多人語音聊天和語音會議的免費軟體。
咪咕音樂:咪咕音樂是中國移動傾力打造的正版音樂播放器
WPS Office:金山公司(Kingsoft)出品的辦公軟體,與微軟Office相容性良好,個人版免費。
Skype:一個使用人數眾多的基於P2P的VOIP聊天軟體。

1.5 相關檔案

1.5.1 專案檔案(.pro)

在建立的Qt專案中自動生成了一個字尾為 .pro 的專案檔案,該檔案中記錄著專案的一些屬性資訊,具體資訊如下:

# 在專案檔案中, 註釋需要使用 井號(#)
# 專案編譯的時候需要載入哪些底層模組
QT       += core gui 

# 如果當前Qt版本大於4, 會新增一個額外的模組: widgets
# Qt 5中對gui模組進行了拆分, 將 widgets 獨立出來了
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
   
# 使用c++11新特性
CONFIG += c++11	

#如果在專案中呼叫了廢棄的函式, 專案編譯的時候會有警告的提示    
DEFINES += QT_DEPRECATED_WARNINGS

# 專案中的原始檔
SOURCES += \
        main.cpp \
        mainwindow.cpp
        
# 專案中的標頭檔案
HEADERS += \
        mainwindow.h
        
# 專案中的視窗介面檔案
FORMS += \
        mainwindow.ui

1.5.2 main.cpp

在這個原始檔中有程式的入口函式 main(),下面給大家介紹下這個檔案中自動生成的幾行程式碼:

#include "mainwindow.h"		// 生成的視窗類標頭檔案
#include <QApplication>		// 應用程式類標頭檔案

int main(int argc, char *argv[])
{
    // 建立應用程式物件, 在一個Qt專案中例項物件有且僅有一個
    // 類的作用: 檢測觸發的事件, 進行事件迴圈並處理
    QApplication a(argc, argv);
    // 建立視窗類物件
    MainWindow w;
    // 顯示視窗
    w.show();
    // 應用程式物件開始事件迴圈, 保證應用程式不退出
    return a.exec();
}

1.5.3 mainwindow.ui

在Qt中每一個視窗都對應一個可編輯的視覺化介面(*.ui), 這個介面對應的是一個xml格式的檔案, 一般情況下不需要在xml格式下對這個檔案進行編輯, 關於這個檔案結構瞭解即可。

<!-- 雙擊這個檔案看到的是一個視窗介面, 如果使用文字編輯器開啟看到的是一個XML格式的檔案 -->
<!-- 看不懂這種格式沒關係, 我們不需要在這種模式下操作這個檔案。 -->
<!-- 這裡只是給大家介紹這個檔案的本質 -->
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget"/>
  <widget class="QMenuBar" name="menubar"/>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

1.5.4 mainwindow.h

這個檔案是視窗介面對應的類的標頭檔案。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>		// Qt標準視窗類標頭檔案

QT_BEGIN_NAMESPACE
// mainwindow.ui 檔案中也有一個類叫 MainWindow, 將這個類放到名稱空間 Ui 中
namespace Ui { class MainWindow; }	
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT	// 這個宏是為了能夠使用Qt中的訊號槽機制

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;		// 定義指標指向視窗的 UI 物件
};
#endif // MAINWINDOW_H

1.5.5 mainwindow.cpp

這個檔案是視窗介面對應的類的原始檔。

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)	// 基於mainwindow.ui建立一個例項物件
{
    // 將 mainwindow.ui 的例項物件和 當前類的物件進行關聯
    // 這樣同名的連個類物件就產生了關聯, 合二為一了
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

相關文章