1. 項目模版
項目類型 | 界面技術 | 適用場景 | 核心依賴模塊 | 開發語言 |
---|---|---|---|---|
Qt Widget Application | C++ Widgets | 傳統桌面應用(復雜控件) | Qt Widgets | C++ |
Qt Console Application | 無 GUI | 命令行工具、服務 | Qt Core | C++ |
Qt Quick Application | QML/Quick | 現代跨平臺應用(動畫/觸摸) | Qt Quick | QML + C++ |
Qt Quick (compat) | QML(舊版兼容) | 遷移舊版 Qt Quick 項目到 Qt 6 | Qt Quick + QtQuick.Compat | QML + C++ |
2. 構建系統?
qmake是Qt自帶的構建工具,專門為Qt項目設計,簡化了項目的配置過程。而CMake是一個跨平臺的構建系統生成器,支持更廣泛的項目類型,不僅僅是Qt。
工具 | 定位 | 開發者 | 主要用途 |
---|---|---|---|
qmake | Qt 官方早期構建工具,專為 Qt 項目優化 | Qt 團隊 | 生成平臺相關的 Makefile 或項目文件 |
CMake | 跨平臺構建系統生成器,支持多種編譯器和項目類型(不限于 Qt) | Kitware | 生成平臺無關的構建文件(如 Makefile、Visual Studio 項目) |
工具 | 優點 | 缺點 |
---|---|---|
qmake | - 簡單易學 - 與 Qt 深度集成 - 快速配置小型項目 | - 功能有限 - 跨平臺支持較弱 - 已過時 |
CMake | - 跨平臺工業標準 - 強大的擴展性 - 活躍的社區支持 | - 學習曲線陡峭 - 配置復雜度較高 |
項目從?qmake?遷移到?CMake?時,除了?
.pro
?和?CMakeLists.txt
?文件的差異,項目中的?代碼本身通常不需要修改,但某些與構建系統相關的代碼或配置可能需要調整?。
qmake 項目文件(.pro):?
# 指定 Qt 模塊
QT += core gui widgets# 項目名稱
TARGET = MyApp# 源文件
SOURCES += main.cpp \mainwindow.cpp# 頭文件
HEADERS += mainwindow.h# 資源文件
RESOURCES += icons.qrc# 條件編譯(平臺相關)
win32 {LIBS += -luser32
} else {LIBS += -lpthread
}
等效的 CMakeLists.txt:
# 指定 CMake 最低版本
cmake_minimum_required(VERSION 3.16)# 定義項目名稱和語言
project(MyApp LANGUAGES CXX)# 查找 Qt 模塊
find_package(Qt6 COMPONENTS Core Gui Widgets REQUIRED)# 添加可執行文件
add_executable(MyAppmain.cppmainwindow.cppmainwindow.h
)# 處理 Qt 資源文件
qt_add_resources(MyApp "resources"PREFIX "/"FILES icons.qrc
)# 鏈接 Qt 庫
target_link_libraries(MyApp PRIVATEQt6::CoreQt6::GuiQt6::Widgets
)# 平臺特定配置
if(WIN32)target_compile_definitions(MyApp PRIVATE WINDOWS)
elseif(UNIX)target_compile_definitions(MyApp PRIVATE LINUX)
endif()
3. 選擇類
QMainWindow是主窗口類,通常用于應用程序的主界面,包含菜單欄、工具欄、狀態欄等。QWidget是所有用戶界面對象的基類,可以作為其他窗口或控件的容器。
QDialog是對話框類,用于短期交互,比如打開文件或設置選項。
三個類的繼承關系。
QMainWindow和QDialog都是QWidget的子類,但各自有不同的擴展功能。
QMainWindow提供了標準的應用程序框架,
而QDialog則專注于對話框的特定行為,比如模態和非模態。
QWidget適合作為自定義控件或簡單窗口,而QMainWindow適合復雜的主界面。
特性 | QWidget | QMainWindow | QDialog |
---|---|---|---|
繼承關系 | 所有控件的基類 | 繼承自?QWidget | 繼承自?QWidget |
預設組件 | 無 | 菜單欄、工具欄、狀態欄 | 對話框按鈕布局 |
窗口修飾 | 可選標題欄 | 完整標題欄(最大化/最小化) | 簡化標題欄(無最大化) |
典型用途 | 簡單窗口或子控件 | 應用程序主界面 | 彈窗、配置窗口 |
模態支持 | 需手動實現 | 無內置支持 | 支持模態(exec() ) |
返回值機制 | 無 | 無 | 可返回?Accepted/Rejected |
1. 主界面開發?→?QMainWindow
-
需要菜單欄、工具欄或停靠窗口的復雜應用。
2. 短期交互彈窗?→?QDialog
-
如文件選擇、設置選項、消息提示。
3. 自定義控件或簡單窗口?→?QWidget
-
作為子控件容器,或不需要復雜框架的獨立窗口。
?4. 構建套件
MSVC是微軟的Visual C++編譯器,主要用于Windows平臺,和Visual Studio集成。而MinGW是Minimalist GNU for Windows的縮寫,提供了GNU工具鏈在Windows上的移植,可以生成原生Windows應用,但使用的是GNU的工具鏈。
MSVC通常需要安裝Visual Studio,而MinGW可能更輕量。MSVC是商業使用可能需要授權,而MinGW是開源的。
特性 | MSVC(Microsoft Visual C++) | MinGW(GNU for Windows) |
---|---|---|
開發者 | 微軟(Microsoft) | GNU 社區 + MinGW 項目 |
編譯器基礎 | 微軟的閉源編譯器(集成于 Visual Studio) | GNU GCC 的 Windows 移植版(開源) |
兼容性 | 僅 Windows | 跨平臺支持(通過 GCC) |
運行時庫依賴 | 依賴?MSVCRT(需安裝 VC++ Redistributable) | 依賴?MinGW 運行時庫(靜態或動態鏈接) |
調試工具 | 深度集成 Visual Studio 調試器 | 支持 GDB(需手動配置) |
C++ 標準支持 | 緊跟最新標準(如 C++20),更新快 | 更新較慢(依賴 GCC 版本) |
性能優化 | 針對 Windows 高度優化,生成代碼效率高 | 通用優化,可能略遜于 MSVC |
授權協議 | 閉源(需 Visual Studio 授權,社區版免費) | 開源(GPL/LGPL) |
Qt 官方支持 | 優先支持,預編譯包完善 | 支持,但部分模塊可能需自行編譯 |
部署便捷性 | 需分發 VC++ 運行時庫(或靜態鏈接) | 可靜態編譯,減少依賴 |
1. 推薦使用 MSVC 的情況
-
開發 Windows 專用應用:需要深度集成 Windows API(如 DirectX、COM 組件)。
-
依賴 Visual Studio 生態:使用 Visual Studio 的調試器、性能分析工具。
-
企業級開發:需要官方支持、長期維護的編譯器。
-
追求性能:MSVC 生成的代碼在 Windows 上通常更高效。
2. 推薦使用 MinGW 的情況
-
跨平臺開發:希望代碼在 Linux/macOS 和 Windows 間無縫移植(使用同一工具鏈)。
-
開源項目:需遵守 GPL 協議,避免閉源依賴。
-
輕量化部署:通過靜態鏈接減少運行時依賴(無需安裝 VC++ Redistributable)。
-
資源受限環境:無需安裝龐大的 Visual Studio,只需 MinGW 工具鏈。
?