输入关键词开始搜索

Kitools 架构设计

PC效率工具箱 - 项目架构说明书

版本: 1.0.0
文档日期: 2026-02-19


目录

  1. 项目概述
  2. 技术栈
  3. 目录结构
  4. 架构设计
  5. 核心模块详解
  6. 数据流设计
  7. 设计模式应用
  8. 扩展指南

1. 项目概述

1.1 项目定位

PC效率工具箱是一个模块化的桌面效率工具集合,采用插件化架构设计,每个功能模块独立开发、独立运行,通过统一的主框架进行管理。

1.2 设计目标

目标描述
模块化各功能模块独立,便于扩展和维护
轻量化最小化资源占用,快速启动
易用性简洁直观的用户界面
可扩展支持快速添加新的效率工具模块

1.3 版本信息

属性
项目名称PCProductivityToolbox
版本号1.0.0
开发语言C++17
GUI框架Qt 6.9.0
构建系统CMake 3.16+
目标平台Windows 10/11

2. 技术栈

2.1 核心技术

技术版本用途
C++C++17核心开发语言
Qt6.9.0GUI框架
CMake3.16+构建系统

2.2 Qt模块依赖

模块用途
Qt6::Core核心功能(信号槽、事件循环、JSON处理等)
Qt6::WidgetsGUI组件(窗口、按钮、布局等)
Qt6::Gui图形渲染、字体处理

2.3 平台特定API

平台API用途
WindowsWin32 API (SetWindowPos)窗口置顶控制

3. 目录结构

d:\gitee\Kitools/

├── assets/                          # 资源文件目录
│   └── resources.qrc                # Qt资源文件定义

├── docs/                            # 文档目录
│   └── 使用说明书.md                # 用户使用手册

├── src/                             # 源代码目录
│   │
│   ├── main.cpp                     # 程序入口点
│   │
│   ├── core/                        # 核心框架
│   │   ├── mainwindow.h             # 主窗口头文件
│   │   └── mainwindow.cpp           # 主窗口实现
│   │
│   └── modules/                     # 功能模块目录
│       │
│       ├── timer/                   # 计时器模块
│       │   ├── timercontroller.h    # 控制器头文件
│       │   ├── timercontroller.cpp  # 控制器实现
│       │   ├── overlaywidget.h      # 置顶窗口头文件
│       │   ├── overlaywidget.cpp    # 置顶窗口实现
│       │   ├── timersettingspanel.h # 设置面板头文件
│       │   ├── timersettingspanel.cpp # 设置面板实现
│       │   ├── settingsmanager.h    # 设置管理器头文件
│       │   └── settingsmanager.cpp  # 设置管理器实现
│       │
│       └── todo/                    # 待办事项模块
│           ├── todocontroller.h     # 控制器头文件
│           ├── todocontroller.cpp   # 控制器实现
│           ├── desktoptodowidget.h  # 桌面窗口头文件
│           ├── desktoptodowidget.cpp # 桌面窗口实现
│           ├── taskitemwidget.h     # 任务项组件头文件
│           ├── taskitemwidget.cpp   # 任务项组件实现
│           ├── taskmanager.h        # 任务管理器头文件
│           ├── taskmanager.cpp      # 任务管理器实现
│           ├── logmanager.h         # 日志管理器头文件
│           ├── logmanager.cpp       # 日志管理器实现
│           ├── todosettingspanel.h  # 设置面板头文件
│           ├── todosettingspanel.cpp # 设置面板实现
│           └── tododatatypes.h      # 数据类型定义

├── CMakeLists.txt                   # CMake构建配置
├── .gitignore                       # Git忽略配置
└── 开发文档.md                      # 开发说明文档

4. 架构设计

4.1 整体架构

项目采用 分层架构 + 模块化设计

┌─────────────────────────────────────────────────────────────┐
│                      表现层 (Presentation)                   │
│  ┌─────────────────┐  ┌─────────────────┐                   │
│  │TimerSettingsPanel│  │TodoSettingsPanel│                   │
│  │  OverlayWidget   │  │DesktopTodoWidget│                   │
│  │                  │  │ TaskItemWidget  │                   │
│  └────────┬─────────┘  └────────┬────────┘                   │
├───────────┼─────────────────────┼────────────────────────────┤
│           │      控制层 (Controller)      │                   │
│  ┌────────┴─────────┐  ┌────────┴────────┐                   │
│  │ TimerController  │  │  TodoController │                   │
│  └────────┬─────────┘  └────────┬────────┘                   │
├───────────┼─────────────────────┼────────────────────────────┤
│           │       业务层 (Business)        │                  │
│  ┌────────┴─────────┐  ┌────────┴────────┐                   │
│  │ SettingsManager  │  │   TaskManager   │                   │
│  │     (单例)       │  │   LogManager    │                   │
│  └──────────────────┘  └─────────────────┘                   │
├─────────────────────────────────────────────────────────────┤
│                      核心框架 (Core)                         │
│  ┌──────────────────────────────────────────────────────┐   │
│  │                    MainWindow                         │   │
│  │              (主框架/模块容器/托盘管理)                 │   │
│  └──────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘

4.2 模块交互图

                    ┌─────────────┐
                    │  MainWindow │
                    │  (主框架)    │
                    └──────┬──────┘

           ┌───────────────┼───────────────┐
           │               │               │
           ▼               ▼               ▼
    ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
    │   Module 1  │ │   Module 2  │ │   Module N  │
    │   Timer     │ │    Todo     │ │   (扩展)    │
    └──────┬──────┘ └──────┬──────┘ └─────────────┘
           │               │
    ┌──────┴──────┐ ┌──────┴──────┐
    │ Controller  │ │ Controller  │
    │     +       │ │     +       │
    │   Widget    │ │   Widget    │
    │     +       │ │     +       │
    │   Manager   │ │   Manager   │
    └─────────────┘ └─────────────┘

4.3 模块内部结构

每个功能模块遵循统一的内部结构:

Module/
├── xxxcontroller.h/cpp     # 模块控制器 - 协调各组件
├── xxxwidget.h/cpp         # 主界面组件 - 用户交互
├── xxxsettingspanel.h/cpp  # 设置面板 - 配置管理
├── xxxmanager.h/cpp        # 业务管理器 - 数据处理
└── xxxdatatypes.h          # 数据类型定义

5. 核心模块详解

5.1 核心框架 (Core)

MainWindow

职责:主窗口管理、模块容器、系统托盘集成

关键成员

class MainWindow : public QMainWindow {
    QStackedWidget *m_stackedWidget;    // 模块切换容器
    QSystemTrayIcon *m_trayIcon;        // 系统托盘图标
    TimerController *m_timerController; // 计时器模块控制器
    TodoController *m_todoController;   // 待办模块控制器
};

关键功能

  • 卡片式工具选择界面
  • 模块切换管理
  • 最小化到托盘
  • 托盘菜单管理

5.2 计时器模块 (Timer)

类图

┌─────────────────┐     ┌─────────────────┐
│ TimerController │────▶│  OverlayWidget  │
│   (控制器)      │     │   (置顶窗口)     │
└────────┬────────┘     └─────────────────┘

         │              ┌─────────────────┐
         └─────────────▶│TimerSettingsPanel│
                        │   (设置面板)     │
                        └────────┬────────┘


                        ┌─────────────────┐
                        │ SettingsManager │
                        │   (设置管理器)   │
                        │    [单例]       │
                        └─────────────────┘

TimerController

职责:计时逻辑控制、组件协调

关键成员

class TimerController : public QObject {
    QTimer *m_timer;              // 计时器
    int m_remainingSeconds;       // 剩余秒数
    int m_elapsedSeconds;         // 已计秒数(正向计时)
    TimerSettingsPanel::TimerMode m_currentMode; // 当前模式
};

OverlayWidget

职责:置顶显示窗口

关键特性

  • 无边框窗口 (Qt::FramelessWindowHint)
  • 置顶显示 (Qt::WindowStaysOnTopHint)
  • 支持拖动
  • 闪烁提示

SettingsManager

职责:设置持久化管理(单例模式)

存储方式:QSettings (INI格式)

5.3 待办事项模块 (Todo)

类图

┌─────────────────┐     ┌─────────────────┐
│ TodoController  │────▶│DesktopTodoWidget│
│   (控制器)      │     │  (桌面窗口)      │
└────────┬────────┘     └────────┬────────┘
         │                       │
         │              ┌────────┴────────┐
         │              │                 │
         │              ▼                 ▼
         │     ┌─────────────┐   ┌─────────────┐
         │     │TaskItemWidget│   │   其他组件   │
         │     │ (任务项)     │   └─────────────┘
         │     └─────────────┘

         │              ┌─────────────────┐
         ├─────────────▶│   TaskManager   │
         │              │  (任务管理器)    │
         │              │    [单例]       │
         │              └─────────────────┘

         │              ┌─────────────────┐
         └─────────────▶│   LogManager    │
                        │  (日志管理器)    │
                        │    [单例]       │
                        └─────────────────┘

TodoController

职责:模块协调、窗口生命周期管理

DesktopTodoWidget

职责:桌面待办窗口

关键特性

  • 双模式显示(置顶/桌面固定)
  • 窗口拖动与锁定
  • 透明背景支持
  • Windows原生API置顶

TaskManager

职责:任务数据管理(单例模式)

关键功能

  • 任务CRUD操作
  • 数据持久化 (JSON)
  • 状态变更信号

LogManager

职责:操作日志管理(单例模式)

关键功能

  • 日志记录
  • JSON/CSV导出
  • 数据持久化

数据结构

struct TaskData {
    int id;                      // 任务ID
    QString description;         // 任务描述
    bool isCompleted;            // 完成状态
    int completionScore;         // 完成度评分 (0-100)
    QDateTime creationTime;      // 创建时间
    QDateTime completionTime;    // 完成时间
};

struct LogEntry {
    QDateTime timestamp;         // 时间戳
    QString action;              // 操作类型
    QString taskDescription;     // 任务描述
    int score;                   // 评分
};

6. 数据流设计

6.1 计时器数据流

用户操作 ──▶ TimerSettingsPanel ──▶ TimerController ──▶ OverlayWidget
                    │                      │
                    │                      ▼
                    │              SettingsManager
                    │                (持久化)

                    └──────────────────────┘

6.2 待办事项数据流

用户操作 ──▶ DesktopTodoWidget ──▶ TaskManager ──▶ tasks.json
                    │                    │
                    │                    ▼
                    │              LogManager ──▶ logs.json
                    │                    │
                    └────────────────────┘

6.3 信号槽连接

TaskManager 信号

signals:
    void taskAdded(const TaskData &task);
    void taskUpdated(int id);
    void taskRemoved(int id);
    void taskCompleted(int id, bool completed);
    void taskScoreChanged(int id, int score);
    void tasksCleared();

LogManager 信号

signals:
    void logAdded();
    void logsCleared();

7. 设计模式应用

7.1 单例模式 (Singleton)

应用场景:全局唯一的管理器

实现示例

class TaskManager : public QObject {
public:
    static TaskManager* instance() {
        static TaskManager instance;
        return &instance;
    }
private:
    TaskManager() = default;
    TaskManager(const TaskManager&) = delete;
    TaskManager& operator=(const TaskManager&) = delete;
};

使用位置

  • SettingsManager - 计时器设置管理
  • TaskManager - 任务数据管理
  • LogManager - 日志管理

7.2 观察者模式 (Observer)

应用场景:Qt信号槽机制

实现方式

// 数据变更通知
connect(taskManager, &TaskManager::taskAdded, 
        widget, &TodoWidget::onTaskAdded);

// 状态同步
connect(logManager, &LogManager::logAdded,
        panel, &SettingsPanel::updateStats);

7.3 MVC模式

应用场景:模块架构

角色组件职责
ModelTaskManager, LogManager数据管理和业务逻辑
ViewDesktopTodoWidget, TaskItemWidget界面展示
ControllerTodoController协调Model和View

7.4 组合模式 (Composite)

应用场景:任务列表组件

// TaskItemWidget 组合成任务列表
QVBoxLayout *m_taskLayout;
for (const TaskData &task : tasks) {
    TaskItemWidget *widget = new TaskItemWidget(task);
    m_taskLayout->insertWidget(0, widget);
}

8. 扩展指南

8.1 添加新模块步骤

  1. 创建模块目录

    src/modules/newmodule/
    ├── newmodulecontroller.h/cpp
    ├── newmodulewidget.h/cpp
    ├── newmodulesettingspanel.h/cpp
    └── newmodulemanager.h/cpp
  2. 实现控制器接口

    class NewModuleController : public QObject {
    public:
        QWidget* settingsPanel();  // 返回设置面板
        QWidget* mainWidget();     // 返回主界面组件
    };
  3. 注册到主窗口

    // mainwindow.cpp
    m_newModuleController = new NewModuleController(this);
    m_newModulePanel = m_newModuleController->settingsPanel();
    m_stackedWidget->addWidget(m_newModulePanel);
  4. 添加入口卡片

    QPushButton *newModuleBtn = new QPushButton("🔧 新工具");
    connect(newModuleBtn, &QPushButton::clicked, this, &MainWindow::onNewModuleClicked);
  5. 更新CMakeLists.txt

    set(SOURCES
        ...
        src/modules/newmodule/newmodulecontroller.cpp
        ...
    )

8.2 模块开发规范

规范说明
命名规范模块名作为前缀,如 TodoController
文件组织每个类一对.h/.cpp文件
信号槽使用Qt5+新式连接语法
内存管理使用Qt父子对象机制自动管理
数据持久化JSON格式,存储在AppData目录

8.3 推荐的模块接口

class IModule {
public:
    virtual ~IModule() = default;
    virtual QString name() const = 0;
    virtual QString description() const = 0;
    virtual QWidget* settingsPanel() = 0;
    virtual void initialize() = 0;
    virtual void shutdown() = 0;
};

附录

A. 文件统计

类型数量
C++ 头文件12 个
C++ 源文件13 个
总代码行数~3000 行

B. 依赖关系图

MainWindow
    ├── Qt6::Widgets
    │   ├── QMainWindow
    │   ├── QStackedWidget
    │   ├── QSystemTrayIcon
    │   └── QPushButton

    ├── TimerController
    │   ├── QTimer
    │   ├── OverlayWidget (Qt6::Widgets)
    │   └── SettingsManager (QSettings)

    └── TodoController
        ├── DesktopTodoWidget (Qt6::Widgets)
        ├── TaskManager (QFile, QJsonDocument)
        └── LogManager (QFile, QJsonDocument)

C. 构建配置

cmake_minimum_required(VERSION 3.16)
project(PCProductivityToolbox VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt6 REQUIRED COMPONENTS Core Widgets Gui)

add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Widgets Qt6::Gui)

文档维护者: Kitools开发团队
最后更新: 2026-02-19