哈嘍大家好,我是20YC編程小二!掃碼關注公眾號,現在可免費領取《C++程序員》在線視頻教程哦!#下面開始今天內容#
1. Qt Creator介紹
Qt Creator是一個輕量級的跨平臺集成開發環境(IDE),專為使用Qt框架進行應用程序開發而設計。這個工具功能強大、易于使用、快速且高效,被廣泛用于編寫各種類型的應用程序,包括桌面應用程序、移動應用程序和嵌入式系統等。
Qt Creator提供的主要功能包括:
- 可視化的界面設計器和代碼編輯器:可以幫助開發者更快捷地創建復雜的用戶界面和處理各種事件。
- 調試工具:允許開發人員在代碼中設置斷點以及檢查變量、堆棧和調用樹等信息。
- 版本控制工具:有助于開發團隊協同工作。
- 具有自動完成和智能提示功能:可以提高編程效率。
- 支持多語言和跨平臺的開發環境:可以滿足不同開發者的需求。
- 緊密集成的Qt框架:使得開發者可以更容易地管理和部署他們的應用程序。
此外,Qt Creator還具有強大的編輯器功能,如語法高亮、代碼折疊、智能提示、自動完成和代碼重構等。總的來說,Qt Creator是一個功能齊全、易于使用且高效的跨平臺IDE,適用于各種類型的應用程序開發,特別是那些使用Qt框架的開發者。
2. 檢查Qt構建套件(Kit)是否正常
如果剛安裝第一次打開Qt Creator,先檢查構建套件(Kit)是否正常。
點擊【編輯(E)】->【Preferences...】菜單項,打開界面,左邊選擇【構建套件(Kit)】,如下圖,默認找到MSVC 2019表示開發環境正常。
3. 新建第一個Qt GUI程序
- 創建一個"Qt Widgets Application"項目
打開 Qt Creator,點擊"創建項目..."按鈕,打開界面,選擇"Application (Qt)"->"Qt Widgets Application":
- 輸入項目名稱和保存路徑
輸入項目"名稱:"和"創建路徑:",點擊"下一步":
- 選擇使用CMake構建方式
選擇"CMake"構建方式,點擊"下一步":
- 修改QMainWindow主界面類名、文件名
輸入創建程序主界面類名稱和文件等信息,默認即可,點擊"下一步":
- 選擇翻譯文件
沒有翻譯文件,默認進入"下一步":
- 選擇構建套件
選擇"Desktop Qt 6.5.3 MSVC2019 64bit"編譯構建,點擊"下一步":
- 選擇版本控制系統,如Git、SVN等
暫時不添加到版本控制系統,點擊"完成",創建第一個GUI程序:
- Qt 項目文件結構
Qt 項目文件清單如下:
4. Qt Creator主界面介紹
- Qt Creator主界面布局
Qt Creator主界面布局介紹如下:
- 切換到編輯模式
編輯模式:用于修改源文件等。
- 切換到調試模式
調試模式:方便查看調試信息等。
- 切換到項目模式
項目模式:可以查看和修改項目配置信息。
5. 添加按鈕和實現彈出消息框
- 打開mainwindow.ui窗體設計文件
在【項目】文件結構里面,鼠標雙擊"mainwindow.ui"文件:
- 添加 Push Button 按鈕
鼠標拖一個"Push Button"按鈕到中間對話框設計界面上:
- .h 頭文件添加槽函數
什么是槽函數:某個信號(或消息、事件等)的具體實現函數叫槽函數。
例如Pusu Button按鈕點擊的時候,會發射一個QPushButton::clicked()信號,界面類就可以利用槽函數來響應信號,編寫按鈕觸發的業務邏輯代碼。
public slots: // slots 用于修飾以下所有函數為槽函數// 槽函數void slotPushButtonClicked(bool checked = false);
- .cpp 文件實現槽函數功能
// 槽函數實現
void MainWindow::slotPushButtonClicked(bool checked)
{QMessageBox::information(this, "提示信息", "第一個彈框例子");
}
- 修改按鈕顯示名稱
// 修改按鈕顯示名稱
ui->pushButton->setText("點擊我");
- 連接按鈕點擊事件
connect() 連接簡單理解就是綁定的意思。
通過connect()連接函數,把Push Button按鈕的QPushButton::clicked()信號,和槽函數slotPushButtonClicked()連接到一起,當按鈕點擊事件clicked()信號發射時,slotPushButtonClicked()函數就相應的執行。
// 連接按鈕的 clicked 點擊事件到 slotPushButtonClicked 槽函數
connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::slotPushButtonClicked);
- mainwindow.h完整代碼
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECT
public:MainWindow(QWidget *parent = nullptr);~MainWindow();
//添加以下二行代碼
public slots: // slots 用于修飾以下所有函數為槽函數// 槽函數void slotPushButtonClicked(bool checked = false);private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
- mainwindow.cpp完整代碼
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QMessageBox> // 使用 QMessageBox 彈出信息框,需要包含頭文件MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 修改按鈕顯示名稱ui->pushButton->setText("點擊我");// 連接按鈕的 clicked 點擊事件到 slotPushButtonClicked 槽函數connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::slotPushButtonClicked);
}MainWindow::~MainWindow()
{delete ui;
}// 槽函數實現
void MainWindow::slotPushButtonClicked(bool checked)
{QMessageBox::information(this, "提示信息", "第一個彈框例子");
}
- 構建(編譯)項目
選擇菜單【構建】->【構建項目"lesson01"】,或按"Ctrl+B"編譯項目:
- 運行程序
點擊以下按鈕,或按"Ctrl+R"運行程序:
程序運行結果:
6. 擴展知識:CMake介紹
CMake是一個跨平臺的編譯(構建)工具,可以用簡單的語句來描述所有平臺的編譯過程。CMake能夠輸出各種各樣的Makefile或者project文件,能測試編譯器所支持的C++特性,類似UNIX下的automake。
CMake的配置文件是CMakeLists.txt,CMake不會直接建構出最終的軟件,而是產生標準的建構檔(如Unix的Makefile或Windows Visual C++的projects/workspaces),然后再依一般的建構方式使用。
Qt Creator利用CMake來幫助管理和構建C++程序的項目。
(lesson01)項目自動生成的CMakeLists.txt源碼如下:
cmake_minimum_required(VERSION 3.5)project(lesson01 VERSION 0.1 LANGUAGES CXX)set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)set(PROJECT_SOURCESmain.cppmainwindow.cppmainwindow.hmainwindow.ui
)if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)qt_add_executable(lesson01MANUAL_FINALIZATION${PROJECT_SOURCES})
# Define target properties for Android with Qt 6 as:
# set_property(TARGET lesson01 APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()if(ANDROID)add_library(lesson01 SHARED${PROJECT_SOURCES})
# Define properties for Android with Qt 5 after find_package() calls as:
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")else()add_executable(lesson01${PROJECT_SOURCES})endif()
endif()target_link_libraries(lesson01 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.lesson01)
endif()
set_target_properties(lesson01 PROPERTIES${BUNDLE_ID_OPTION}MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}MACOSX_BUNDLE TRUEWIN32_EXECUTABLE TRUE
)include(GNUInstallDirs)
install(TARGETS lesson01BUNDLE DESTINATION .LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)if(QT_VERSION_MAJOR EQUAL 6)qt_finalize_executable(lesson01)
endif()