一、QT開發環境
1.安裝三個部分
①C++編譯器(gcc,cl.exe……)
②QT SDK
SDK-->軟件開發工具包
比如,windows版本QT SDK里已經內置了C++的編譯器(內置編譯器是mingw,windows版本的gcc/g++)
③QT的集成開發環境(IDE)
- 官方提供的QT Creator
最容易入門,最容易上手的方式,開箱即用,雖然QT Creator使用過程中存在不少bug(有些bug非常影響使用體驗,但整體來說用起來挺方便,比較適合初學者)
- Visual Studio
功能更強,但是需要額外的配置更多,更容易出錯,有些公司開發商業QT的時候可能會使用VS,需要給VS安裝插件,并且需要把QT SDK使用VS的編譯器重新編譯(現在也方便一些,有預編譯好的版本)
- Eclipse
Eclipse并非只是Java IDE,本身是一個IDE平臺,可以搭配不同的插件構成不同的IDE
2.QT SDK的下載和安裝
官網地址:Index of /archive/qt
最好選擇一個比較穩定的版本
安裝過程中選這個,QT SDK中內置的C++編譯器
安裝完成后配置環境(不是必須的)
找到安裝目錄,依次點擊
把這個環境添加到系統的環境變量中
①QT自帶的離線版本的官方文檔
②QT設計師,圖形化的設計界面的工具,通過拖拽空間的方式來快速生成界面,會經常搭配QTCreator來使用
③QT語言家,作用是對國際化進行支持,有的時候,寫的程序要和國際接軌,允許單獨創建一個語言配置文件,把界面上需要用到的各種文字都配置到文件中,并且在文件中提前把各種語言的翻譯都配置進去,實現一鍵切換語言的效果
④命令行終端
⑤QT Creator,QT的集成開發工具
3.QT Creator
①創建新項目
新建項目,應用程序如果使用QT寫一個GUI程序,就應該選擇Application
構建系統,通過QT寫的程序,涉及到一系列的“元編程”技術,通過代碼來生成代碼
QT框架會在編譯的時候,自動調用一系列的生成工具,基于自己寫的代碼,生成一系列的其他C++代碼,最終編譯的代碼,也是最后生成的這些代碼
qmake:是老牌的qt構建工具
cmake:并非是qt專屬,很多的開源項目都會使用cmake
Qbs:新一代的qt構建工具(用得少)
使用Qt Creator創建項目,會自動生成一些代碼出來,生成的代碼就包含一個類,此處就是要選擇這個自動生成的類的父類是誰,QT中內置的類都是以Q前綴開頭的
QMainWindows--完整的應用程序窗口
QWidget--表示一個控件(窗口上的一個具體元素:輸入框,按鈕,下拉框,單選按鈕復選按鈕等)
QDialog--表示一個對話框
自動變為widget名稱,其中form file
非常關鍵
Qt中創建圖形化界面的程序有兩種方式:
- 直接通過
C++
代碼的方式創建界面 - 通過
form file
,以圖形化的方式來生成界面
此時,就可以使用Qt Designer
或者直接使用Qt Creator
來編輯這個ui文件,從而以圖形化的方式快速方便的生成圖形界面
選擇翻譯文件,暫時不關注,這部分和國際化相關
選擇一下基于哪個編譯器的Qt SDK來構建后續代碼
②項目自動生成的代碼
#include "mywidget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MyWidget w;w.show();return a.exec();
}
QApplication a(argc,argv);
編寫一個Qt的圖形化界面程序,一定需要有QApplication
對象
Mywidget w;
Widget在創建項目的時候,填寫了生成的類名,創建一個控件對象
.show()
方法讓空間顯示出來
.hide()
方法讓空間隱藏
這些方法都是Widget的父類QWidget提供的
return a.exec();
exec表示讓程序執行起來(與linux中的exec沒有任何關系,只是名字恰好一樣)
#ifndef MYWIDGET_H
#define MYWIDGET_H
// 表示保證頭文件只被包含一次,更推薦#pragma once#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class MyWidget; }
QT_END_NAMESPACE// 創建項目時選擇的父類,Qt SDK內置的,
// 要想使用這個類,就要包含這個頭文件,
// 在Qt中,使用的類的頭文件名稱一樣
class MyWidget : public QWidget
{Q_OBJECT // 是Qt內置的宏,宏本質是文本替換// 展開后,會生成一大堆代碼,Qt中有一個非常核心的機制,“信號和槽”// 如果某個類想使用“信號和槽”,就需要引入這個宏public:MyWidget(QWidget *parent = nullptr); // Qt中引用了“對象樹”機制,對象給掛到對象樹上// 往樹上掛的時候就需要指定父節點(對象樹就是一個普通的N叉樹,不是二叉樹)~MyWidget();private:Ui::MyWidget *ui; // 和form file密切相關
};
#endif // MYWIDGET_H
#ifndef MYWIDGET_H
#define MYWIDGET_H
表示保證頭文件只被包含一次,更推薦#pragma once
class MyWidget : public QWidget
創建項目時選擇的父類,Qt SDK內置的,要想使用這個類,就要包含這個頭文件,在Qt中,使用的類的頭文件名稱一樣
Q_OBJECT
是Qt內置的宏,宏本質是文本替換,展開后,會生成一大堆代碼,Qt中有一個非常核心的機制,“信號和槽”,如果某個類想使用“信號和槽”,就需要引入這個宏
MyWidget(QWidget *parent = nullptr);
Qt中引用了“對象樹”機制,對象給掛到對象樹上,往樹上掛的時候就需要指定父節點(對象樹就是一個普通的N叉樹,不是二叉樹)
Ui::MyWidget *ui;
和form file密切相關
#include "mywidget.h"
#include "ui_mywidget.h" //form file 被qmake生成的頭文件MyWidget::MyWidget(QWidget *parent): QWidget(parent), ui(new Ui::MyWidget)
{ui->setupUi(this);
}MyWidget::~MyWidget()
{delete ui;
}
#include "ui_mywidget.h"
form file 被qmake生成的頭文件
ui(new Ui::MyWidget){ ui->setupUi(this); }
把form file
生成的界面和當前widget關聯起來
③form file文件 .ui
雙擊打開.ui文件,此時Qt Creator就會調用Qt Desiger,打開ui文件,圖形化的界面編輯器
左側就是Qt中內置的控件,拖拽左側的空間到程序窗口中,就可以創建出具體的界面了
右側黃色背景的事編輯屬性,每個控件都有很多屬性,會影響到控件具體行為
此時點擊編輯按鈕,就會看到.ui文件的具體內容
.pro
Qt項目的工程文件,也是qmake工具構架時候的重要依據
QT += core gui
要引入的Qt的模塊,后面學習到一些內容的時候可能會修改這里
SOURCES += \main.cpp \mywidget.cppHEADERS += \mywidget.hFORMS += \mywidget.ui
描述了當前項目中,參與構建的文件都有啥,編譯器要編譯哪些文件,這個地方不需要手動修改,Qt Creator會自動維護好
.pro
類似于linux中的Makefile
④ 中間文件
構建過程中會產生一些中間文件
右鍵點擊.pro
文件,然后點擊在Explorer中顯示,返回上一級會發現有一個同級文件夾
在運行一次程序后,就會在項目目錄并列的地方,多出來一個“build-xxxxx”目錄,這個目錄里面就是該項目運行過程中,產生的一些臨時文件(下圖是因為創建的時候選了git)
編譯Qt程序,還是會用到Makefile,但是不需要手動寫,而是編譯器會自動生成
ui_mywidget.h
是 widget.ui
xml
生成的.h文件
Empty.exe
這就是最終生成的可執行程序,如果直接運行和在Qt Creator中運行時效果相同
.pro
文件配置項:
- TARGET: 指定生成的可執行文件的名稱。
- TEMPLATE: 指定項目的類型,例如應用程序(app)、庫(lib)等。
- SOURCES: 指定源代碼文件的列表。
- HEADERS: 指定頭文件的列表。
- LIBS: 指定需要鏈接的庫。
- QT: 指定項目所需的Qt模塊。
- DEFINES: 定義預處理宏。
- QMAKE_CXXFLAGS: 指定編譯器選項。
- win32/unix/macx: 平臺特定的配置,用于針對不同的操作系統設置特定的編譯選項。
通過編輯.pro文件,開發者可以定制項目的構建過程,包括指定源文件、鏈接庫、定義宏、設置編譯選項等。在Qt項目中,.pro文件的靈活性和可定制性使得開發者能夠更好地管理項目的構建和依賴關系。