Qt 项目结构 #
项目类型概览 #
Qt 支持多种项目类型:
text
┌─────────────────────────────────────────────────────────────┐
│ Qt 项目类型 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. Qt Widgets Application │
│ - 传统桌面应用程序 │
│ - 使用 C++ 和 Qt Widgets │
│ - 适合:桌面工具、管理系统 │
│ │
│ 2. Qt Quick Application │
│ - 现代 UI 应用程序 │
│ - 使用 QML 和 JavaScript │
│ - 适合:移动应用、多媒体应用 │
│ │
│ 3. Qt Console Application │
│ - 控制台应用程序 │
│ - 无 GUI 界面 │
│ - 适合:命令行工具、服务程序 │
│ │
│ 4. Qt Static Library │
│ - 静态链接库 │
│ - 编译时链接 │
│ │
│ 5. Qt Shared Library │
│ - 动态链接库 │
│ - 运行时加载 │
│ │
└─────────────────────────────────────────────────────────────┘
典型项目结构 #
Widgets 项目结构 #
text
MyQtApp/
├── MyQtApp.pro # 项目配置文件
├── main.cpp # 主程序入口
├── mainwindow.h # 主窗口头文件
├── mainwindow.cpp # 主窗口实现
├── mainwindow.ui # 界面设计文件
├── resources.qrc # 资源文件
├── resources/ # 资源目录
│ ├── images/
│ │ ├── logo.png
│ │ └── icon.png
│ └── styles/
│ └── style.qss
├── widgets/ # 自定义控件
│ ├── customwidget.h
│ └── customwidget.cpp
├── models/ # 数据模型
│ ├── datamodel.h
│ └── datamodel.cpp
└── utils/ # 工具类
├── helper.h
└── helper.cpp
多项目结构 #
text
MyQtProject/
├── MyQtProject.pro # 主项目文件
├── app/ # 应用程序
│ ├── app.pro
│ ├── main.cpp
│ └── mainwindow.cpp
├── core/ # 核心库
│ ├── core.pro
│ ├── core.h
│ └── core.cpp
├── plugins/ # 插件
│ ├── plugins.pro
│ └── plugin.cpp
└── tests/ # 测试
├── tests.pro
└── test_main.cpp
.pro 文件详解 #
基本结构 #
qmake
# MyQtApp.pro
# 模块配置
QT += core gui widgets network sql
# Qt 版本检查
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
# C++ 标准
CONFIG += c++17
# 项目名称
TARGET = MyQtApp
# 项目模板类型
TEMPLATE = app
# 源文件
SOURCES += \
main.cpp \
mainwindow.cpp \
widgets/customwidget.cpp
# 头文件
HEADERS += \
mainwindow.h \
widgets/customwidget.h
# 界面文件
FORMS += \
mainwindow.ui
# 资源文件
RESOURCES += \
resources.qrc
# 部署配置
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
常用变量 #
text
┌─────────────────────────────────────────────────────────────┐
│ .pro 文件常用变量 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 项目配置: │
│ TARGET - 目标文件名 │
│ TEMPLATE - 项目模板 (app/lib/subdirs) │
│ CONFIG - 编译配置选项 │
│ QT - Qt 模块 │
│ │
│ 文件列表: │
│ SOURCES - 源文件 (.cpp) │
│ HEADERS - 头文件 (.h) │
│ FORMS - 界面文件 (.ui) │
│ RESOURCES - 资源文件 (.qrc) │
│ │
│ 编译选项: │
│ DEFINES - 预处理器定义 │
│ INCLUDEPATH - 头文件搜索路径 │
│ DEPENDPATH - 依赖文件搜索路径 │
│ LIBS - 链接库 │
│ │
│ 安装配置: │
│ target.path - 安装路径 │
│ INSTALLS - 安装目标 │
│ │
└─────────────────────────────────────────────────────────────┘
Qt 模块配置 #
qmake
# 常用 Qt 模块
QT += core # 核心模块(默认包含)
QT += gui # GUI 模块(默认包含)
QT += widgets # 控件模块
QT += network # 网络模块
QT += sql # 数据库模块
QT += multimedia # 多媒体模块
QT += xml # XML 处理模块
QT += webengine # Web 引擎模块
QT += 3d # 3D 模块
QT += charts # 图表模块
QT += location # 地图定位模块
# 移除模块
QT -= gui # 控制台应用不需要 GUI
CONFIG 配置 #
qmake
# 编译配置
CONFIG += debug # 调试版本
CONFIG += release # 发布版本
CONFIG += debug_and_release # 同时生成两种版本
# C++ 标准
CONFIG += c++11
CONFIG += c++14
CONFIG += c++17
CONFIG += c++20
# 其他配置
CONFIG += qt # 使用 Qt(默认)
CONFIG += warn_on # 开启警告
CONFIG += exceptions # 启用异常
CONFIG += rtti # 启用 RTTI
CONFIG += stl # 启用 STL
# 应用程序类型
CONFIG += console # 控制台应用
CONFIG += windows # Windows 应用(无控制台)
CONFIG += staticlib # 静态库
CONFIG += dll # 动态库
条件判断 #
qmake
# 平台判断
win32 {
# Windows 特定配置
SOURCES += windows_specific.cpp
LIBS += -luser32
}
unix {
# Unix/Linux/macOS 特定配置
SOURCES += unix_specific.cpp
}
macx {
# macOS 特定配置
ICON = app.icns
QMAKE_INFO_PLIST = Info.plist
}
linux {
# Linux 特定配置
LIBS += -ludev
}
# Qt 版本判断
lessThan(QT_MAJOR_VERSION, 6) {
# Qt 5 及以下版本配置
QT += widgets
}
# 构建类型判断
CONFIG(debug, debug|release) {
DEFINES += DEBUG_MODE
} else {
DEFINES += RELEASE_MODE
}
包含其他 .pro 文件 #
qmake
# 包含公共配置
include(common.pri)
# 包含子项目
SUBDIRS += \
core \
app \
plugins
# 设置子项目依赖
app.depends = core
CMake 项目配置 #
Qt 6 推荐使用 CMake 作为构建系统:
CMakeLists.txt 基本结构 #
cmake
cmake_minimum_required(VERSION 3.16)
project(MyQtApp VERSION 1.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
# 查找 Qt
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
# 源文件
set(SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
# 创建可执行文件
add_executable(MyQtApp ${SOURCES})
# 链接 Qt 库
target_link_libraries(MyQtApp PRIVATE
Qt6::Core
Qt6::Gui
Qt6::Widgets
)
# 安装规则
install(TARGETS MyQtApp
BUNDLE DESTINATION .
RUNTIME DESTINATION bin
)
CMake 常用配置 #
cmake
# 添加 Qt 模块
find_package(Qt6 REQUIRED COMPONENTS
Core
Gui
Widgets
Network
Sql
)
# 添加资源文件
qt_add_resources(RESOURCES resources.qrc)
# 添加翻译文件
qt_add_translations(TS_FILES
translations/app_zh.ts
translations/app_en.ts
)
# 添加 Qt Quick 模块
qt_add_qml_module(MyApp
URI MyApp
VERSION 1.0
QML_FILES
Main.qml
Page.qml
)
# 设置输出目录
set_target_properties(MyQtApp PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib
)
# 平台特定配置
if(WIN32)
set_target_properties(MyQtApp PROPERTIES
WIN32_EXECUTABLE TRUE
)
elseif(APPLE)
set_target_properties(MyQtApp PROPERTIES
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_ICON_FILE app.icns
)
endif()
资源文件 (.qrc) #
资源文件结构 #
xml
<!-- resources.qrc -->
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource prefix="/images">
<file>images/logo.png</file>
<file>images/icon.png</file>
</qresource>
<qresource prefix="/styles">
<file>styles/style.qss</file>
</qresource>
<qresource prefix="/" lang="zh_CN">
<file alias="translations/app_zh.qm">translations/app_zh_CN.qm</file>
</qresource>
</RCC>
使用资源文件 #
cpp
// 加载图片
QPixmap pixmap(":/images/logo.png");
QLabel *label = new QLabel;
label->setPixmap(pixmap);
// 加载样式表
QFile file(":/styles/style.qss");
if (file.open(QFile::ReadOnly)) {
QString styleSheet = QLatin1String(file.readAll());
qApp->setStyleSheet(styleSheet);
file.close();
}
// 使用资源路径
QIcon icon(":/images/icon.png");
setWindowIcon(icon);
项目模板 (TEMPLATE) #
app 模板 #
qmake
TEMPLATE = app
TARGET = MyApplication
SOURCES += main.cpp
lib 模板 #
qmake
TEMPLATE = lib
TARGET = MyLibrary
CONFIG += staticlib # 或 dll
SOURCES += mylibrary.cpp
HEADERS += mylibrary.h
subdirs 模板 #
qmake
TEMPLATE = subdirs
SUBDIRS += \
core \
app \
plugins
# 设置子项目目录
core.subdir = core
app.subdir = app
plugins.subdir = plugins
# 设置依赖关系
app.depends = core
plugins.depends = core
项目最佳实践 #
文件组织 #
text
项目根目录/
├── CMakeLists.txt # 或 .pro 文件
├── src/ # 源代码
│ ├── main.cpp
│ ├── widgets/
│ ├── models/
│ └── utils/
├── include/ # 公共头文件
├── resources/ # 资源文件
│ ├── images/
│ ├── styles/
│ └── resources.qrc
├── tests/ # 测试代码
├── docs/ # 文档
├── translations/ # 翻译文件
└── cmake/ # CMake 模块
命名规范 #
cpp
// 类名:大驼峰
class MyCustomWidget : public QWidget
{
Q_OBJECT
public:
// 函数名:小驼峰
void setCustomValue(int value);
int customValue() const;
private:
// 成员变量:m_ 前缀 + 大驼峰
int m_customValue;
QString m_userName;
};
// 常量:全大写 + 下划线
const int MAX_BUFFER_SIZE = 1024;
// 枚举:大驼峰
enum class Status {
Ready,
Running,
Finished
};
下一步 #
现在你已经了解了 Qt 项目结构,接下来学习 Qt 基础语法,深入理解信号槽和元对象系统!
最后更新:2026-03-29