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