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;
}