01 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 官方網站
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
主函式所在的檔案
widget.h
視窗類標頭檔案
widget.cpp
視窗類原始檔
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)
等。
.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:
如果跳到如下頁面,選擇清華大學映象源下載即可。
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隱藏了高階儲存功能,導致沒辦法直接去設定程式碼編碼。那麼我們直接把高階儲存功能調用出來即可:
-
單擊“工具”|“自定義”命令,彈出“自定義”對話方塊。
-
單擊“命令”標籤,進入“命令”選項卡;在“選單欄”下拉列表中,選擇“檔案”選項;單擊“新增命令”按鈕,彈出“新增命令”對話方塊。
-
在“類別”列表中,選擇“檔案”選項;在“命令”列表中,選擇“高階儲存選項”選項。 單擊“確定”。
...這個操作還是比較麻煩,使用下面的自動修改是最方便的
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.rc和zay.ico檔案新增到專案中,重新生成即可
5.Qt Creator + MSVC
先安裝好Qt Creator和visual studio,前者做編輯器,用後者的編譯器,最後安裝一個偵錯程式。
通過
下載之後安裝即可
安裝完成之後重新開啟Qt Creator,會自動檢測除錯工具的路徑。
安裝Vs之後,編譯器也會自動檢測到(我這是安裝了2019與2021,所以有很多)
最後需要自己選擇一下,對應版本的編譯器和偵錯程式x64和x86都可以配置一下
中文亂碼
如果出現亂碼可以在.pro檔案中加入以下程式碼
msvc
{
QMAKE_CFLAGS += /utf-8 #C語言編譯器選項
QMAKE_CXXFLAGS+=/utf-8 #C++編譯器選項
}
搜尋
複製