1. 程式人生 > 其它 >01 Qt-入門

01 Qt-入門

 

1.Qt是什麼?

Qt(官方發音 [kju:t],音同 cute)是一個跨平臺的 C++ 開發庫,主要用來開發圖形使用者介面(Graphical User Interface,GUI)程式,當然也可以開發不帶介面的命令列(Command User Interface,CUI)程式。

Qt 是純 C++ 開發的,所以學好 C++ 非常有必要,Qt 還存在 Python、Ruby、Perl 等指令碼語言的繫結, 也就是說可以使用指令碼語言開發基於 Qt 的程式。開源社群就是這樣,好東西就會被派生擴充套件,到處使用, 越來越壯大。

Qt 支援的作業系統有很多,例如通用作業系統 Windows、Linux、Unix,智慧手機系統 Android、iOS、WinPhone, 嵌入式系統 QNX、VxWorks 等等。

Qt 可以做什麼?

Qt 雖然經常被當做一個 GUI 庫,用來開發圖形介面應用程式,但這並不是 Qt 的全部;Qt 除了可以繪製漂亮的介面(包括控制元件、佈局、互動),還包含很多其它功能,比如多執行緒、訪問資料庫、影象處理、音訊視訊處理、網路通訊、檔案操作等,這些 Qt 都已經內建了。

Qt 是應用程式開發的一站式解決方案,有了 Qt,你就可以高枕無憂了!Qt 本身包含的模組也日益豐富, 一直有新模組和第三方模組加入進來。

大部分應用程式都可以使用 Qt 實現,除了與計算機底層結合特別緊密的,例如驅動開發,它直接使用硬體提供的程式設計介面,而不能使用作業系統自帶的函式庫。

1997年,Qt 被用來開發 Linux 桌面環境 KDE,大獲成功,使 Qt 成為 Linux 環境下開發 C++ GUI 程式的事實標準。

下面的程式都使用 Qt 開發:WPS、YY語音、Skype、豆瓣電臺、蝦米音樂、淘寶助理、千牛、暴雪的戰網客戶端、VirtualBox、Opera、咪咕音樂、Google地圖、Adobe Photoshop Album 等。

Linux 也是嵌入式的主力軍,廣泛應用於消費類電子、工業控制、軍工電子、電信/網路/通訊、航空航天、汽車電子、醫療裝置、儀器儀表等相關行業。

Qt 雖然也支援手機作業系統,但是由於 Android 本身已經有 Java 和 Kotlin,iOS 本身已經有 Objective-C 和 Swift,所以 Qt 在移動端的市場份額幾乎可以忽略。

總起來說,Qt 主要用於桌面程式開發和嵌入式開發。

Qt 的辛酸史

說到 Qt 的發展史,那真是一波三折,幾經賣身。

Qt 最早是 1991 年由挪威的 Eirik Chambe-Eng 和 Haavard Nord 開發的, 他們隨後於 1994 年 3 月 4 號正式成立奇趣科技公司(Trolltech)。Qt 原本是商業授權的跨平臺開發庫, 在 2000 年奇趣科技公司為開源社群釋出了遵循 GPL(GNU General Public License)許可證的開源版本。

在 2008 年,諾基亞公司收購了奇趣科技公司,並增加了 LGPL(GNU Lesser General Public License)的授權模式。諾基亞聯合英特爾利用 Qt 開發了全新的智慧手機系統 MeeGo,可惜遭遇了微軟木馬屠城,諾基亞被迫放棄了 MeeGo, 而 Qt 商業授權業務也於 2011 年 3 月出售給了芬蘭 IT 服務公司 Digia。

 

當然好訊息是 Digia 於 2014 年 9 月宣佈成立 Qt Company 全資子公司,獨立運營 Qt 商業授權業務。目前 Qt 公司大力推廣移動平臺開發和商業應用, 總的來說 Qt 歷經曲折,現在算是步入正軌了。

經過 30 多年的發展,Qt 已經成為最優秀的跨平臺開發框架之一,在各行各業的專案開發中得到廣泛應用。許多大型軟體都是用 Qt 開發的,如 Autodesk Maya、Google Earth、Skype、WPS Office等。

永遠不要忽視微軟帝國的威脅,作為軟體業的一代霸主,任何人都不要天真地試圖和它做朋友,因為霸主不可能有朋友。微軟的木馬屠城是所有諾基亞人和芬蘭人的痛,希望讀者們都記牢這條。

Qt 和 KDE

之前提到 Qt 原本是商業授權軟體,是怎麼開源的呢?這就涉及 Qt 和 KDE 的糾葛了。

KDE 是 Linux 作業系統的桌面環境,與 GNOME 桌面是類似的,作為開源桌面它們競爭的情況更為多見。

KDE 是採用 GPL 許可證釋出的開源軟體,而最初 Qt 是商業授權的,存在商業侵權風險,GNOME 則是基於開源 GTK 庫的,沒有什麼商業風險,這一度是 GNOME 優越於 KDE 的特性。

由於 Qt 的商業授權,KDE 社群一度混亂糾結,與此同時 GNOME 則如火如荼發展起來了。 KDE 畢竟算是親兒子,被另一波人欺負,奇趣科技公司當然看不下去了,最後是奇趣科技公司為了贏得開發者的支援,為 Qt 增加了 GPL 的開源授權, 對於開源社群而言,遵循 GPL 使用 Qt 就不需要付費,這為 KDE 解決了燃眉之急。

之後 KDE 桌面和 GNOME 都發展壯大起來,都做得越來越好了。

GPL 和 LGPL

除了商業授權,目前 Qt 的開源授權有兩種,一種是 GPL 授權,另一種是 LGPL 授權(諾基亞收購後新增)。

對這兩種開源授權,簡單來說,使用 GPL 版本的軟體一定還是 GPL 的開源軟體,無論是使用了 Qt 的程式程式碼還是修改了 Qt 庫程式碼,都必須按照 GPL 來發布,這是 GPL 的傳染性。

GPL 是什麼都要開源,這對商業軟體應用是不利的,所以諾基亞增加了 LGPL 授權 (第一個 L 可以叫 Lesser 寬鬆版或 Library 開發庫版)。使用 LGPL 授權就可以利用 Qt 官方動態連結庫,而不必開放商業程式碼。只要不修改和定製 Qt 庫,僅使用 Qt 官方釋出的動態連結庫就可以不開源,這是商業友好的授權模式。

其實只要不是做商業,就不太需要關注用什麼授權,以 GPL 授權釋出程式程式碼就可以了。

如何選擇開源協議

世界上的開源協議有上百種,很少有人能徹底搞清它們之間的區別,即使在最流行的六種開源協議——GPL、BSD、MIT、Mozilla、Apache 和 LGPL——之中做選擇,也很複雜。

烏克蘭程式設計師 Paul Bagwell 畫了一張分析圖,說明應該怎麼選擇開源協議,大家看了一目瞭然,真是清爽。

最後請認準 Qt 官方網站Qt官網

 

2.為什麼用Qt?

用 Qt 來開發 Windows 桌面程式有以下優點:

  • 簡單易學:Qt 封裝的很好,幾行程式碼就可以開發出一個簡單的客戶端,不需要了解 Windows API。

  • 資料豐富:資料豐富能夠成倍降低學習成本,否則你只能去看原始碼,關於 DirectUI、Htmlayout、aardio 的資料就很少。

  • 漂亮的介面:Qt 很容易做出漂亮的介面和炫酷的動畫,而 MFC、WTL、wxWidgets 比較麻煩。

  • 獨立安裝:Qt 程式最終會編譯為原生代碼,不需要其他庫的支撐,而 Java 要安裝虛擬機器,C# 要安裝 .NET Framework。

  • 跨平臺:如果你的程式需要執行在多個平臺下,同時又希望降低開發成本,Qt 幾乎是必備的。

Qt 和 MFC

讀者經常將 MFC 和 Qt 進行對比,MFC 只能應用在 Windows 平臺,而 Qt 是跨平臺的,一次編寫,到處執行。

另外,Qt 已經封裝了底層細節,學習 Qt 將會非常簡單;而 MFC 只是給 Windows API 加了一層包裝,不瞭解 Windows API 也學不好 MFC,大家普遍反映 MFC 難學。

我們不能簡單地說 Qt 好還是 MFC 好,兩者都有用武之地;但是初學者學習 Qt 會比較簡單,不用應付那些煩人的 Windows API,很快就能開發出帶有漂亮介面的應用程式。

 

3.Qt Creator

Qt是開源的庫 Qt Creator是一個整合開發環境

安裝文件教程

安裝視訊教程

安裝之後新增元件

1,找到Qt安裝目錄中的維護工具MaintenanceTool.exe

2,新增國內源

手動新增儲存庫要定位一個儲存有*QT線上安裝映象的地址*,這可難壞我了,但是經過不懈努力還是被我找到了(網址:http://download.qt.io/static/mirrorlist/)這個網站,顯示了各國的qt映象站點,中國有四個,我用的是中科大的站,點選HTTP會進入一個網路資料夾。

然後依次進入/online/qtsdkrepository/windows_x86/root/qt/ 最終的資料夾顯示如下,在這個介面複製一下當前地址框地址

編碼問題

Qt Creator是跨平臺的 Qt IDE, Qt Creator 是 Qt 被 Nokia收購後推出的一款新的輕量級整合開發環境(IDE)。此 IDE 能夠跨平臺執行,支援的系統包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。

  • 使用QtCreator建立的專案目錄中不能包含中文和空格

  • QtCreator預設使用Utf8格式編碼對檔案字元進行編碼

為了處理漢字,程式設計師設計了用於簡體中文的GB2312和用於繁體中文的big5。GB2312 支援的漢字太少,1995年的漢字擴充套件規範GBK1.0,支援了更多的漢字。2000年的 GB18030取代了GBK1.0成為了正式的國家標準。Unicode 也是一種字元編碼方法,不過它是由國際組織設計,可以容納全世界所有語言文字的編碼方案。

修改Qt Creator檔案編碼:選單欄->工具->選項->文字編輯器->行為->檔案編碼

 

主介面

 

建立專案

  • 選擇專案模板

  • 填寫專案名稱和選擇路徑(不能包含中文和空格~不能包含中文和空格~不能包含中文和空格~)

  • 定義編譯系統(qmake即可)

  • 選擇視窗類資訊

  • 選擇編譯套件(用Qt Creator開發請選擇MinGW Minimalist GNU for Windows)

 

專案檔案

main.cpp

主函式所在的檔案

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

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

 

widget.h

視窗類標頭檔案

#ifndef WIDGET_H
#define WIDGET_H

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

class Widget : public QWidget //自己的類繼承自Qwidget類
{
   Q_OBJECT //使用訊號與槽機制,必須包含該巨集

public:
   Widget(QWidget *parent = nullptr);
   ~Widget();
};
#endif // WIDGET_H

 

widget.cpp

視窗類原始檔

#include "widget.h"

Widget::Widget(QWidget *parent)
  : QWidget(parent)
{
}

Widget::~Widget()
{
}

 

HelloQt.pro

Qt專案檔案,註釋需要用#號

#專案編譯時需要載入哪些模組
QT       += core gui

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

# 讓Qt支援c++11標準
CONFIG += c++11

#如果您使用任何已標記為不推薦使用的Qt功能,則以下定義使您的編譯器發出警告(確切的警告取決於您的編譯器)。
#請參考不推薦使用的API的文件,以瞭解如何將您的程式碼移植遠離它。
DEFINES += QT_DEPRECATED_WARNINGS

#如果使用過時的API,您還可以使程式碼無法編譯。
#為此,請取消註釋以下行。
#您也可以選擇僅在特定版本的Qt之前禁用已棄用的API。
#DEFINES + = QT_DISABLE_DEPRECATED_BEFORE = 0x060000   #禁用所有在Qt 6.0.0之前棄用的API

# 專案中的原始檔 刪除後,專案裡不會顯示所有的原始檔
SOURCES += \
  main.cpp \
  widget.cpp

# 專案中的標頭檔案
HEADERS += \
  widget.h

#部署的預設規則
qnx: target.path = /tmp/$${TARGET}/bin #嵌入式
else: unix:!android: target.path = /opt/$${TARGET}/bin #unix
!isEmpty(target.path): INSTALLS += target

pro是Qt的工程檔案,這個檔案是給qmake用來生成Makefile用的。

如果瞭解makefile的人應該知道,Makefile的三個關鍵點就是目標依賴命令。這裡也很類似。pro檔案中可以指明這個Qt專案的標頭檔案原始檔連結的外部庫目標檔名模板(生成什麼樣的Makefile)版本配置(debug/release)等。

常用qmake變數

.pro中變數 含義 示例
TEMPLATE 模板變數指定生成makefile(app:應用程式/lib:庫) TEMPLATE = app
QT 指定載入的Qt模組(core/gui/widgets...) QT += widgtes
DESTDIR 指定生成的應用程式放置的目錄 DESTDIR += ../bin
TARGET 指定生成的應用程式名 TARGET = hello
HEADERS 工程中包含的標頭檔案 HEADERS += hello.h
FORMS 工程中包含的.ui設計檔案 FORMS += hello.ui
SOURCES 工程中包含的原始檔 SOURCES += main.cpp hello.cpp
RESOURCES 工程中包含的資原始檔 RESOURCES += qrc/hello.qrc
LIBS 引入的lib檔案的路徑 -L:引入路徑 LIBS += -L.
CONFIG 用來告訴qmake關於應用程式的配置資訊 CONFIG+= qt warn_on release
UI_DIR 指定.ui檔案轉化成ui_*.h檔案的存放目錄 UI_DIR += forms
RCC_DIR 指定將.qrc檔案轉換成qrc_*.h檔案的存放目錄 RCC_DIR += ../tmp
MOC_DIR 指定將含Q_OBJECT的標頭檔案轉換成標準.h檔案的存放目錄 MOC_DIR += ../tmp
OBJECTS_DIR 指定目標檔案(obj)的存放目錄 OBJECTS_DIR += ../tmp
DEPENDPATH 程式編譯時依賴的相關路徑 DEPENDPATH += . forms include qrc sources
INCLUDEPATH 標頭檔案包含路徑 INCLUDEPATH += .
DEFINES 增加前處理器巨集(gcc的-D選項)。 DEFINES += USE_MY_STUFF
QMAKE_CFLAGS 設定c編譯器flag引數 QMAKE_CFLAGS += -g
QMAKE_CXXFLAGS 設定c++編譯器flag引數 QMAKE_CXXFLAGS += -g
QMAKE_LFLAGS 設定連結器flag引數 QMAKE_LFLAGS += -rdynamic

專案操作

新增新檔案

 

開啟Qt專案

 

其他

 

常用快捷鍵

  • 執行 Ctrl + r

  • 編譯 Ctrl + b

  • 註釋 Ctrl + /

  • 字型縮放 Ctrl + 滑鼠滾輪

  • 查詢/替換 Ctrl + f

  • 整行移動 Ctrl + Shift + ↑ 或 ↓

  • 自動對齊 Ctrl + i

  • 幫助文件

    • 第一種:Qt Creator 直接檢視 F1

    • 第二種:開啟獨立的幫助文件程式 assistant

  • 同名.h 和 .cpp 之間的切換 F4

  • 快速新增函式的定義 Alt + Enter 滑鼠移動到函式申明上

  • 修改變數名,並應用到所有用到該變數的地方 Ctrl + Shift +r

  • 快速開啟輸出視窗 Alt + 數字鍵(1-8)

  • 書籤功能,即在某行程式碼處進行標記,方便以後找到。書籤也可以新增文字標註。

    • 按Ctrl + M 新增/刪除書籤

    • 按Ctrl + . 查詢並移動到下一個標籤

主題配置

蘿蔔白菜各有所愛,如何修改QtCreator的主題呢?

選單欄->工具->選項->文字編輯器

上面是選擇系統自帶的,當然也可以自己配置一個,我這配置了一個Vs白色主題的。

  • xml檔案 Visual studio white(Qt creator程式碼樣式).xml

  • 把該檔案複製到Qt的安裝目錄下的->Qt\Qt5.14.2\Tools\QtCreator\share\qtcreator\styles目錄中

  • 最後進入文字編輯器選擇

 

4.Qt+VS2019

為什麼用VS寫Qt程式?

很多人在Qt上寫程式碼時,感覺不是很舒服,所以想在Vs上寫Qt程式,而且Vs具有強大的除錯能力,所以咱們可以通過一些配置實現此目的。

1.開啟VS

選擇選單欄->擴充套件->管理擴充套件

2.VS安裝Qt外掛

選擇選單欄的 擴充套件->管理擴充套件,輸入Qt搜尋,然後下載Qt Visual Studio Tools(下載灰常的銀杏,慢的死~還不一定能下載)

如果實在不能忍受這龜速,咱們來別的辦法

先到Qt官網下載對於版本的外掛,我這裡是Vs2019:

Qt官網外掛下載

微軟拓展商店下載

如果跳到如下頁面,選擇清華大學映象源下載即可。

3.安裝VSIX(即上面下載的那個外掛)

如果是通過Vs下載的,會自動安裝。

如果是手動下載的,需要雙擊自己安裝。

開啟安裝包之後,點選Install等待安裝完成即可。

安裝之前,請先關掉Vs沒有關掉會出現如下介面,點選end tasks即可

關閉Vs之後,一秒安裝完成

安裝完成,關掉程式

4.設定外掛

再次開啟Vs,擴充套件->Qt VS Tools->Qt Options

點選Qt Options之後會彈出如下介面

如果在彈出上述介面的同時,還彈出如下這個錯誤介面,不要擔心,這是由於安裝外掛的時候,會自動配置,但是自動配置的路徑和實際的Qt安裝路徑不一致,我們自己再配置一下就ok了

首先刪掉自動配置好的路徑,然後點選Add自己新增一個,如下是具體的路徑選項,選擇msvc2017_64資料夾,點選確定即可

然後點選OK(Name是自己取的)

5.VS建立Qt專案

在Vs中點選新建專案,搜尋Qt找到Qt Widgets Application然後點選下一步。

下一步之後,給專案取名稱

點選建立,然後點選Next

然後從Debug和Release模式裡選擇一個即可(預設即可)

然後點選完成

最後,Ctrl+F5,大功告成

 

6,中文亂碼

由於windows預設的編碼方式為GB2312,而Qt使用的是Unicode,兩種編碼方式不一樣導致了亂碼產生。

我們需要把程式碼檔案改為utf-8儲存,可以手動修改,也可以藉助外掛自動修改。

1,手動修改

VS隱藏了高階儲存功能,導致沒辦法直接去設定程式碼編碼。那麼我們直接把高階儲存功能調用出來即可:

  1. 單擊“工具”|“自定義”命令,彈出“自定義”對話方塊。

  2. 單擊“命令”標籤,進入“命令”選項卡;在“選單欄”下拉列表中,選擇“檔案”選項;單擊“新增命令”按鈕,彈出“新增命令”對話方塊。

  3. 在“類別”列表中,選擇“檔案”選項;在“命令”列表中,選擇“高階儲存選項”選項。 單擊“確定”。

...這個操作還是比較麻煩,使用下面的自動修改是最方便的

2,自動修改

開啟 VS2017,依次點選 工具 -> 擴充套件和更新,搜尋外掛 “ForceUTF8”,安裝後原始碼檔案會強制儲存為帶 BOM 的 UTF-8。

 

注意:修改之後,寫C/C++程式碼會出現亂碼,此時再進到外掛->已安裝吧Force UTF-8禁用掉,然後重啟Vs即可

7,Vs中修改應用程式圖示

  • 1,備好一個.ico圖示檔案

  • 2,建立一個.rc檔案(建立txt修改後綴即可),然後加入以下程式碼

    IDI_ICON1 ICON DISCARDABLE "zay.ico"
  • 3,將.rc檔案和.ico檔案都放在專案的資料夾中

  • 在VS中右擊Source File篩選器選擇新增||現有項,將logo.rczay.ico檔案新增到專案中,重新生成即可

5.Qt Creator + MSVC

先安裝好Qt Creator和visual studio,前者做編輯器,用後者的編譯器,最後安裝一個偵錯程式。

通過windows SDK工具安裝偵錯程式(CDB)。

下載之後安裝即可

安裝完成之後重新開啟Qt Creator,會自動檢測除錯工具的路徑。

安裝Vs之後,編譯器也會自動檢測到(我這是安裝了2019與2021,所以有很多)

最後需要自己選擇一下,對應版本的編譯器和偵錯程式x64和x86都可以配置一下

中文亂碼

如果出現亂碼可以在.pro檔案中加入以下程式碼

msvc
{
QMAKE_CFLAGS += /utf-8 #C語言編譯器選項
QMAKE_CXXFLAGS+=/utf-8 #C++編譯器選項
}

搜尋

複製