ComicReader 是一款使用 C++ 和 Qt 6 开发的桌面漫画阅读器,专注于提供流畅、舒适的本地漫画阅读体验。它支持多种文件格式,并提供可定制的界面主题和阅读模式。
(请将此处的 placeholder.png 替换为应用截图)
- 多种阅读模式:
- 单页模式: 传统的翻页体验。
- 连续滚动模式: 通过滚轮实现无缝的垂直滚动阅读,带来沉浸式体验。
- 广泛的格式支持:
- 直接打开包含图片的文件夹。
- 支持常见的单张图片格式 (JPG, PNG, BMP 等)。
- 支持未压缩的 ZIP 存档 (
.zip)。
- 内置下载器:
- 从支持的图源下载漫画。
- 下载完成后自动将图片文件夹打包为
.zip文件,方便管理和分享(同时保留原文件夹)。
- 个性化界面:
- 明亮/黑暗主题: 内置两套 UI 主题,可随时切换以适应不同环境。
- 可调的用户界面: 简洁的工具栏和菜单设计,专注于阅读核心。
- 阅读辅助:
- 页面缩放、旋转和自适应窗口大小。
- 状态栏实时显示当前页码/总页数。
本项目依赖于 Qt 6 和 C++17 编译器。
- Qt 6.2+ (Widgets, Gui, Network 模块)
- C++17 兼容的编译器 (例如 GCC 9+, Clang 10+, MSVC 2019+)
- MinGW (如果在 Windows 上使用 GCC)
-
克隆仓库:
git clone https://github.com/CobePuppy/ComicReader.git cd ComicReader -
配置项目: 使用 Qt Creator 打开
ComicReader.pro文件,它会自动配置项目。或者,通过命令行手动构建:
# 创建构建目录 mkdir build && cd build # 运行 qmake (请确保 qmake 在你的 PATH 中) qmake ../ComicReader.pro # 编译 (根据你的环境选择合适的 make 工具) # 在 Windows (MinGW) mingw32-make # 在 macOS 或 Linux make
-
运行: 编译完成后,可执行文件将位于构建目录下的
release或debug文件夹中。
- 打开漫画: 点击“打开”按钮或使用菜单栏,选择一个漫画文件夹、图片或
.zip文件。 - 切换阅读模式: 通过菜单栏的“视图”->“连续模式”选项来切换。
- 切换主题: 在“视图”->“主题”菜单中选择“明亮”或“黑暗”主题。
- 使用下载器: 在“工具”->“下载”中打开下载管理器。
- 支持压缩的 ZIP/RAR/7z 格式。
- 优化连续模式下的内存占用(懒加载)。
- 保存用户偏好设置(如主题、窗口大小等)。
- 完善下载器功能,支持更多图源和任务管理。
本项目采用 MIT 许可证。
一个正在演进中的现代化漫画阅读器,基于 Qt 6 (C++17) 开发。当前版本聚焦:
- 本地目录阅读(支持直接打开图片文件夹)
- 基础漫画解析框架(后续扩展 ZIP/CBZ、RAR/CBR、PDF)
- 在线搜索 Dock + MockProvider 模拟搜索与“下载”流程(生成占位图片)
- 简洁阅读界面(翻页、缩放、适应宽度)
后续将逐步引入真实站点适配、缓存优化、书签/历史、插件化 Provider 等特性。
- 打开本地目录中的图片序列:jpg/jpeg/png/webp/bmp
- 页码导航(下一页 / 上一页)
- 缩放与适应策略(后续拟添加适应高度、双页模式等)
- ReaderWidget 中简单的相邻页预载逻辑
- 规划:LRU 内存缓存 + 可选磁盘缩略图缓存
- ✅ 串行队列(DownloadManager)
- ✅ 任务进度 / 完成 / 失败信号
- ✅ 自动生成保存目录(标题 + 时间戳)
- ✅ 下载完成后自动打开为漫画
- ✅ MockProvider 生成占位 PNG 模拟真实页面
- 🔜 并行窗口 / 取消 / 限速 / 断点续传 / 真实网络
- 当前:简单状态提示 + Dock 文本日志
- 规划:分级日志、文件输出、UI 过滤
- 主窗口 + 阅读器
- 在线搜索 Dock(关键词输入 → 结果列表 → 详情 → 下载)
- 状态栏简要反馈
- 规划:主题 / 多标签 / 库视图 / 下载面板独立化
- 操作系统: Windows 10+, macOS 10.14+, Ubuntu 18.04+
- Qt版本: Qt 5.15+ 或 Qt 6.2+
- 编译器: 支持 C++17 的编译器
- 内存: 最少 512MB RAM
- 存储: 至少 100MB 可用空间
-
安装 Qt 开发环境
- 下载并安装 Qt
- 确保安装了以下模块:
- Qt Core
- Qt Widgets
- Qt Network
- Qt WebEngine
-
安装编译工具
- Windows: Visual Studio 2019+ 或 MinGW
- macOS: Xcode Command Line Tools
- Linux: GCC 或 Clang
-
克隆代码
git clone https://github.com/CobePuppy/ComicReader.git cd ComicReader -
使用 Qt Creator 编译
- 打开 Qt Creator
- 选择 "打开项目"
- 选择
ComicReader.pro文件 - 配置编译套件
- 点击 "构建" 按钮
-
使用命令行编译
# 生成 Makefile qmake ComicReader.pro # 编译项目 make # Windows 用户使用 nmake # 或 mingw32-make
-
运行程序
# 进入构建目录 cd build/release # 或 build/debug # 运行程序 ./ComicReader # Linux/macOS ComicReader.exe # Windows
ComicReader/
├── src/
│ ├── core/
│ │ ├── config/ # ConfigManager
│ │ ├── parsers/ # 漫画解析(目录 + 预留压缩/文档)
│ │ └── web/ # Web 搜索/下载(DownloadManager / WebSearchManager / MockProvider)
│ ├── ui/
│ │ ├── mainwindow/ # 主窗口
│ │ ├── reader/ # 阅读器组件
│ │ └── web/ # 搜索 Dock UI(SearchDockWidget)
│ ├── utils/ # 工具类
│ └── main.cpp # 程序入口
├── include/ # 头文件目录
│ ├── core/ # 核心模块头文件
│ ├── ui/ # 界面组件头文件
│ └── utils/ # 工具类头文件
├── resources/ # 资源文件
│ ├── icons/ # 图标资源
│ └── styles/ # 样式表
├── tests/ # 单元测试
├── ComicReader.pro # Qt项目文件
└── README.md # 项目说明文档
-
打开漫画
- 点击 "文件" → "打开文件" 选择本地漫画文件
- 或点击 "文件" → "打开URL" 输入在线漫画地址
-
阅读控制
- 使用工具栏按钮或键盘快捷键翻页
- 滚动鼠标滚轮进行缩放
- 拖拽图像进行移动
-
在线搜索与模拟下载
- 视图 → 勾选“在线搜索”
- 输入关键词点击“搜索”
- 选择结果 → “下载所选”
- 生成占位图片后自动打开阅读
-
个性化设置
- 点击 "工具" → "设置" 打开设置界面
- 根据需要调整各项配置
Ctrl+O: 打开文件Ctrl+U: 打开URLCtrl+D: 下载管理器Ctrl+,: 设置F11: 全屏切换Space: 下一页Backspace: 上一页Ctrl++: 放大Ctrl+-: 缩小Ctrl+0: 重置缩放
短期(1.x):
- ZIP / RAR / PDF 解析实现
- 下载并行 / 取消 / 错误细化(重试策略)
- Provider 体系稳定化(配置 / 限速)
- 缓存与缩略图
中期(2.x):
- 书签 / 历史 / 本地库索引
- 真正站点 Provider(合规实现)
- 日志中心与调试面板
远期(3.x+):
- 插件化 Provider & UI 模块化
- 云同步 / 多设备
- 高性能异步解码 / 并行预取
WebProviderBase 接口简述:
class WebProviderBase : public QObject {
Q_OBJECT
public:
virtual QString name() const = 0;
virtual bool supportsSearch() const { return true; }
public slots:
virtual void search(const QString &keyword) = 0;
virtual void download(const WebComicResult &res, const QString &targetDir) = 0;
signals:
void searchResults(const QList<WebComicResult>&);
void searchFailed(const QString &error);
void downloadProgress(const DownloadProgressInfo &info);
void downloadFinished(const QString &taskId, const QString &localPath);
void downloadFailed(const QString &taskId, const QString &error);
};实现步骤:
- 继承
WebProviderBase,实现name() / search() / download()。 - 在启动阶段通过
WebSearchManager::addProvider()注册。 search():发起网络请求 → 解析 → 组装WebComicResult列表(记得sourceName = name())。download():逐页请求图片 → 保存到targetDir→ emit 进度 & 完成信号。- 需要节流:使用
QTimer+ 队列 或QSemaphore控制频率。
保存目录命名逻辑在 DownloadManager::buildTargetDir(),可自定义添加站点标识/章节号。
附带的 MockProvider 仅用于演示,本项目本身不提供也不鼓励分发受版权保护的未授权作品。
实现真实 Provider 时请务必:
- 遵守目标站点 ToS / robots 协议
- 不抓取或传播侵权内容
- 合理控制请求频率(限速 / 缓存)
- 标注第三方来源,尊重署名条款
- 遵守所在地相关版权与数据法规
维护者与贡献者不对不当使用造成的法律风险负责。
欢迎贡献代码!请遵循以下步骤:
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
- 使用 C++17 标准
- 遵循 Qt 编码规范
- 添加适当的注释
- 编写单元测试
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
- 项目主页: https://github.com/CobePuppy/ComicReader
- 问题反馈: https://github.com/CobePuppy/ComicReader/issues
- 邮箱: 2026744219@qq.com
- Qt 框架团队
- 所有贡献者和用户
- 开源社区的支持
ComicReader - 让漫画阅读更加美好! 📚✨