# softwarer_qt **Repository Path**: shendeyidi/softwarer_qt ## Basic Information - **Project Name**: softwarer_qt - **Description**: 存放一些QT开发时,自己写的一些组件和库。 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-12 - **Last Updated**: 2026-02-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # softwarer_qt [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Qt](https://img.shields.io/badge/Qt-5.15%2B-blue.svg)](https://www.qt.io/) [![C++](https://img.shields.io/badge/C++-17-blue.svg)](https://en.cppreference.com/w/cpp/17) [![Platform](https://img.shields.io/badge/platform-Windows%20%7%2B%20%7C%20Linux%20%7C%20macOS-lightgrey.svg)](https://www.qt.io/) softwarer_qt是一个基于Qt框架的现代化C++工具库集合,旨在简化Qt应用程序的开发过程。项目采用模块化设计,提供了多个功能模块,包括网络请求、UI皮肤、日志记录、Promise实现等,帮助开发者快速构建高质量的Qt应用程序。 ## 目录 - [项目概述](#项目概述) - [功能特性](#功能特性) - [目录结构](#目录结构) - [核心模块](#核心模块) - [依赖项](#依赖项) - [安装方法](#安装方法) - [快速开始](#快速开始) - [使用示例](#使用示例) - [模块详解](#模块详解) - [贡献指南](#贡献指南) - [许可证](#许可证) - [联系方式](#联系方式) ## 项目概述 softwarer_qt是一个功能丰富的Qt工具库集合,包含了多个实用的模块,用于简化Qt应用程序的开发。每个模块都有明确的职责和功能,可以独立使用或组合使用,为开发者提供灵活的解决方案。 ### 设计理念 - **模块化设计**:每个模块职责明确,易于维护和扩展 - **现代C++**:使用C++17特性,提供类型安全和高效的API - **跨平台**:基于Qt框架,支持Windows、Linux、macOS等平台 - **易用性**:提供简洁的API接口,学习成本低 - **可扩展性**:支持自定义实现和扩展 ## 功能特性 - **Promise实现**:基于模板的Promise实现,用于处理异步操作 - **HTTP请求库**:简洁易用的HTTP请求库,支持Promise风格 - **UI皮肤系统**:功能强大的UI皮肤库,提供自定义样式的UI组件 - **调试工具**:灵活的调试工具,支持自定义日志显示 - **工具类库**:实用的工具类,提供各种辅助功能 - **自动内存管理**:良好的内存管理,避免内存泄漏 - **跨平台支持**:基于Qt,支持跨平台使用 - **类型安全**:使用模板和类型安全的API,减少运行时错误 - **异步处理**:使用Promise模式处理异步操作 - **可扩展性**:支持自定义实现和扩展 ## 目录结构 ``` softwarer_qt/ ├── Samples/ # 示例代码 │ ├── QAxios_Samples/ # QAxios 示例 │ ├── Skinner_Samples/ # Skinner 示例 │ └── CMakeLists.txt # 示例项目构建配置 ├── Softwarer/ # 核心库 │ ├── CProimse/ # Promise 实现 │ ├── Debugging/ # 调试工具 │ ├── QAxios/ # HTTP 请求库 │ ├── QHutu/ # 工具类 │ ├── Skinner/ # UI 皮肤库 │ └── CMakeLists.txt # 核心库构建配置 ├── out/ # 构建输出目录 ├── .vscode/ # VSCode 配置 ├── CMakeLists.txt # 主项目构建配置 ├── CMakePresets.json # CMake 预设配置 ├── CMakeUserPresets.json # CMake 用户预设配置 ├── LICENSE # 许可证文件 └── README.md # 项目说明文档 ``` ## 核心模块 ### 1. CProimse **功能**:实现Promise模式,用于处理异步操作 **特性**: - 模板类设计,支持任意类型的异步操作结果 - 三种状态:PENDING(进行中)、FULFILLED(已成功)、REJECTED(已拒绝) - 支持注册成功和失败回调函数 - 支持链式调用 **应用场景**: - 异步网络请求处理 - 异步文件操作 - 异步数据库操作 ### 2. Debugging **功能**:提供调试和日志记录功能 **特性**: - 支持不同级别的日志(TRACE、DEBUG、INFO、WARN、ERROR、FATAL) - 可自定义日志显示方式(通过IDisplay接口) - 单例模式设计 **应用场景**: - 应用程序日志记录 - 调试信息输出 - 错误追踪 ### 3. QAxios **功能**:HTTP请求库,类似于JavaScript中的Axios **特性**: - 支持GET和POST请求 - Promise风格的异步响应处理 - 支持链式调用构建参数 - 自动内存管理 - 多实例支持 **应用场景**: - RESTful API调用 - Web服务交互 - 数据获取和提交 ### 4. QHutu **功能**:通用工具类,提供各种辅助功能 **特性**: - 资源文件读取(readResourceFile) - 文本文件读取(readTextFile) - 路径处理(splitPath、combine) - 目录路径获取(resourceDirPath、applicationDirPath) - Qt日志器创建(createQLogger) **应用场景**: - 文件操作 - 路径处理 - 资源管理 ### 5. Skinner **功能**:UI皮肤库,提供自定义样式的UI组件 **特性**: - 自定义窗口装饰器(IWindowDecorator) - 自定义标题栏(ITitlebar、ClsTitlebar、WinTitlebar) - 自定义按钮(PushButton) - 自定义输入框(LineEdit) - 自定义停靠窗口(IDockDecorator) - 面板装饰器(PanelDecorator) - 主题管理(Theme、Skinner) **应用场景**: - 自定义应用程序外观 - 实现统一的UI风格 - 提供多种主题选择 ## 依赖项 ### 必需依赖 - **C++17** 或更高版本 - **Qt 5.15+** 或 **Qt 6.0+** - **Qt Core**:核心功能 - **Qt Network**:网络请求功能(QAxios模块) - **Qt Widgets**:UI组件(Skinner模块) ### 可选依赖 - **Qt GUI**:GUI功能(Skinner模块) - **Qt Network**:网络功能(QAxios模块) ### 构建工具 - **CMake 3.16** 或更高版本 - **支持C++17的编译器**: - GCC 7+ - Clang 5+ - MSVC 2017+ ## 安装方法 ### 前置条件 确保您的开发环境已安装: - CMake 3.16 或更高版本 - Qt 5.15+ 或 Qt 6.0+ - 支持 C++17 的编译器(GCC 7+, Clang 5+, MSVC 2017+) ### 克隆仓库 ```bash git clone https://github.com/example/softwarer_qt.git cd softwarer_qt ``` ### 构建项目 #### 使用CMake构建 ```bash # 创建构建目录 mkdir build && cd build # 配置项目 cmake .. # 编译项目 cmake --build . --config Release # 安装(可选) cmake --install . ``` #### 使用CMake预设 ```bash # 列出可用的预设 cmake --list-presets # 使用预设配置 cmake --preset default # 构建项目 cmake --build --preset default ``` ### 集成到现有项目 #### CMake集成 1. 将softwarer_qt目录添加到您的项目中 2. 在您的CMakeLists.txt文件中添加以下内容: ```cmake # 添加softwarer_qt子目录 add_subdirectory(path/to/softwarer_qt/Softwarer) # 链接所需的模块 target_link_libraries(your_target PRIVATE CProimse QAxios Skinner Debugging QHutu ) ``` #### QMake集成 ```qmake # 在您的.pro文件中添加 include(path/to/softwarer_qt/Softwarer/CProimse/CProimse.pri) include(path/to/softwarer_qt/Softwarer/QAxios/QAxios.pri) include(path/to/softwarer_qt/Softwarer/Skinner/Skinner.pri) ``` ## 快速开始 ### 使用QAxios发送HTTP请求 ```cpp #include "QAxios.h" // 创建QAxios实例 QAxios* axios = QAxios::axios("default"); // 构建查询参数 Query* query = Query::query() ->addParam("id", 123) ->addParam("name", "test"); // 发送GET请求 AxiosProimse* promise = axios->get("https://api.example.com/user", query); // 处理响应 promise->then([](ResultResponse response) { QString name = response.toString("name"); bool success = response.toBool("success"); qDebug() << "Name:" << name; qDebug() << "Success:" << success; }).catch([](std::string error) { qDebug() << "Error:" << QString::fromStdString(error); }); ``` ### 使用Skinner创建自定义窗口 ```cpp #include "WindowDecorator.h" #include "SkinnerHelper.h" // 创建自定义窗口 TestWindow* window = new TestWindow(); window->show(); ``` ### 使用CProimse处理异步操作 ```cpp #include "CProimse.h" // 创建Promise CProimse* promise = new CProimse(); // 注册回调 promise->then([](QString result) { qDebug() << "Operation completed:" << result; }).catch([](std::string error) { qDebug() << "Operation failed:" << QString::fromStdString(error); }); // 完成Promise promise->resolve("Success!"); ``` ### 使用Debugging记录日志 ```cpp #include "Debugging.h" #include "Logger.h" // 创建调试器 Debugging* debugging = Debugging::createDebugging(); // 创建日志器 Logger* logger = debugging->createLogger(); // 设置日志级别 debugging->setLogLevel(LogLevel::INFO); // 记录日志 logger->error(1001, "An error occurred"); logger->trace("This is a trace message"); ``` ## 使用示例 ### 示例1:完整的网络请求应用 ```cpp #include #include "QAxios.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建QAxios实例 QAxios* axios = QAxios::axios("default"); // 发送GET请求 Query* query = Query::query()->addParam("page", 1); AxiosProimse* promise = axios->get("https://api.example.com/data", query); // 处理响应 promise->then([](ResultResponse response) { QString data = response.toString("data"); qDebug() << "Received data:" << data; }).catch([](std::string error) { qDebug() << "Error:" << QString::fromStdString(error); }); return app.exec(); } ``` ### 示例2:自定义UI组件 ```cpp #include #include "WindowDecorator.h" #include "SkinnerHelper.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建登录窗口 LoginWidget* login = new LoginWidget(); PanelDecorator* decorator = decorateWithCls(login); decorator->show(); return app.exec(); } ``` ### 示例3:异步操作组合 ```cpp #include "CProimse.h" #include "QAxios.h" void combinedOperations() { // 创建Promise CProimse* promise = new CProimse(); // 发送网络请求 QAxios* axios = QAxios::axios("default"); Query* query = Query::query()->addParam("id", 123); AxiosProimse* axiosPromise = axios->get("https://api.example.com/data", query); // 处理网络请求结果 axiosPromise->then([promise](ResultResponse response) { QString data = response.toString("data"); promise->resolve(data); }).catch([promise](std::string error) { promise->reject(error); }); // 处理最终结果 promise->then([](QString result) { qDebug() << "Final result:" << result; }).catch([](std::string error) { qDebug() << "Final error:" << QString::fromStdString(error); }); } ``` ## 模块详解 ### CProimse模块 CProimse是一个模板化的Promise实现,用于处理异步操作。它支持三种状态:PENDING、FULFILLED和REJECTED,并允许注册成功和失败回调函数。 **核心类**: - `CProimse`:Promise模板类 - `CProimseState`:Promise状态枚举 **主要方法**: - `resolve(Element element)`:完成Promise - `reject(const std::string& reason)`:拒绝Promise - `then(const Resolve& res)`:注册成功回调 - `onCatch(const Reject& rej)`:注册失败回调 **使用场景**: - 异步网络请求 - 异步文件操作 - 异步数据库操作 ### Debugging模块 Debugging模块提供调试和日志记录功能,支持不同级别的日志和自定义日志显示方式。 **核心类**: - `Debugging`:调试系统接口 - `Logger`:日志记录器 - `IDisplay`:日志显示接口 - `LogLevel`:日志级别枚举 **主要方法**: - `Debugging::createDebugging()`:创建调试器实例 - `Debugging::createLogger()`:创建日志器实例 - `Logger::error(unsigned int code, const std::string& message)`:记录错误日志 - `Logger::trace(const std::string& message)`:记录追踪日志 **使用场景**: - 应用程序日志记录 - 调试信息输出 - 错误追踪 ### QAxios模块 QAxios是一个HTTP请求库,类似于JavaScript中的Axios,提供了简洁、易用的API接口。 **核心类**: - `QAxios`:核心HTTP请求类 - `Query`:构建GET请求的查询参数 - `Param`:构建POST请求的JSON请求体 - `ResultResponse`:解析和处理HTTP响应 **主要方法**: - `QAxios::axios(const QString& key)`:获取或创建QAxios实例 - `QAxios::get(const QString& url, Query* query)`:发送GET请求 - `QAxios::post(const QString& url, IParam* param)`:发送POST请求 **使用场景**: - RESTful API调用 - Web服务交互 - 数据获取和提交 ### QHutu模块 QHutu是一个通用工具类,提供各种辅助功能,如文件读取、路径处理等。 **核心类**: - `QHutu`:工具类 **主要方法**: - `QHutu::readTextFile(const QString& filepath)`:读取文本文件 - `QHutu::readResourceFile(const QString& filepath)`:读取资源文件 - `QHutu::resourceDirPath(const QString& path)`:获取资源目录路径 - `QHutu::applicationDirPath(const QString& path)`:获取应用程序目录路径 - `QHutu::createQLogger()`:创建Qt日志器 **使用场景**: - 文件操作 - 路径处理 - 资源管理 ### Skinner模块 Skinner是一个UI皮肤库,提供自定义样式的UI组件,使应用程序具有统一的外观。 **核心类**: - `Skinner`:皮肤管理类 - `Theme`:主题类 - `IWindowDecorator`:窗口装饰器接口 - `ITitlebar`:标题栏基类 - `ClsTitlebar`:类样式标题栏 - `WinTitlebar`:窗口样式标题栏 - `PanelDecorator`:面板装饰器 - `IDockDecorator`:停靠窗口装饰器 - `PushButton`:自定义按钮 - `LineEdit`:自定义输入框 **主要方法**: - `Skinner::skinner()`:获取Skinner单例 - `Skinner::getTheme()`:获取当前主题 - `Skinner::setTheme(Theme* theme)`:设置主题 - `decorateWithCls(QWidget* widget)`:为窗口添加类样式装饰 **使用场景**: - 自定义应用程序外观 - 实现统一的UI风格 - 提供多种主题选择 ## 贡献指南 我们欢迎任何形式的贡献,包括但不限于: - 报告Bug - 提出新功能建议 - 提交代码改进 - 改进文档 - 分享使用经验 ### 提交Bug报告 在提交Bug报告时,请提供以下信息: - softwarer_qt版本 - Qt版本 - 操作系统 - 编译器版本 - 复现步骤 - 预期行为 - 实际行为 - 错误日志(如果有) ### 提交代码 1. Fork本仓库 2. 创建您的特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交您的更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启一个Pull Request ### 代码规范 - 遵循项目的代码风格 - 使用Doxygen风格的注释 - 确保代码通过编译 - 添加单元测试(如果适用) - 更新相关文档 ### 文档贡献 - 改进现有文档 - 添加使用示例 - 翻译文档 - 修正错误 ## 许可证 本项目采用MIT许可证,详情请参阅[LICENSE](LICENSE)文件。 ## 联系方式 如果您有任何问题或建议,欢迎通过以下方式联系我们: - Email: example@example.com - GitHub Issues: [提交问题](https://github.com/example/softwarer_qt/issues) - GitHub Discussions: [参与讨论](https://github.com/example/softwarer_qt/discussions) ## 致谢 感谢所有为softwarer_qt项目做出贡献的开发者! ## 相关链接 - [Qt官方文档](https://doc.qt.io/) - [CMake官方文档](https://cmake.org/documentation/) - [C++参考手册](https://en.cppreference.com/) --- **注意**:softwarer_qt是一个基于Qt的现代化C++工具库集合,旨在简化Qt应用程序的开发过程。如果您觉得softwarer_qt对您有帮助,欢迎给我们一个Star!