QWeight Demo 是一个基于Qt框架开发的高性能路径计算可视化工具,专注于哈密顿路径的搜索和展示。该项目采用多线程异步架构,提供了直观的网格界面用于复杂路径算法的演示和分析,支持高达5000条哈密顿路径的并发计算。
- 哈密顿路径计算: 专业的哈密顿路径搜索算法,找到访问所有可通行节点的路径
- 异步多线程架构: 采用QThread和队列机制实现真正的异步计算,UI响应流畅
- 高性能计算: 支持最多5000条哈密顿路径的并行计算和实时显示
- 可视化网格界面: 直观的矩形网格显示,支持动态调整网格大小(最大50x50)
- 美化箭头显示: 采用一笔画风格的精美箭头,直观展示路径方向和顺序
- 实时计算进度: 显示计算进度和已找到的路径数量
- 多格式支持: 支持XML、SQLite、CSV三种数据格式的导入导出
- 自动数据持久化: 计算结果自动保存,支持历史记录管理
- 智能文件检测: 自动识别文件格式并加载数据
- 选择性导出: 支持选中特定结果进行导出操作
- 批量路径管理: 高效管理和显示大量路径计算结果
- 现代化设计: 清晰的布局和直观的操作界面
- 路径可视化表格: 在结果列表中直接显示路径的视觉化预览
- 颜色编码: 使用浅绿色箭头和专业配色提供最佳视觉体验
- Qt布局管理演示: 集成了完整的Qt布局最佳实践演示模块
- 响应式布局: 支持窗口缩放和自适应显示
- 强制停止机制: 点击停止按钮立即终止线程并重新创建,避免卡死
- 内存优化: 智能内存管理,支持大规模路径计算
- 边缘计算显示: 实时显示计算过程中的路径发现
- 线程安全: 完整的线程同步和数据保护机制
- 框架: Qt 5.x/6.x
- 语言: C++14/17
- 构建工具: qmake / CMake
- 编译器: 支持MSVC、MinGW、GCC
src/
├── main.cpp # 程序入口
├── MainWindow.* # 主窗口管理和异步协调
├── AsyncPathCalculator.* # 异步路径计算器(多线程)
├── GridGraphicsView.* # 网格视图组件
├── ControlPanel.* # 控制面板(禁用暂停按钮)
├── ResultListWidget.* # 结果列表展示
├── ArrowRenderer.* # 美化箭头渲染器
├── ArrowGraphicsItem.* # 箭头图形项
├── PathVisualWidget.* # 路径可视化组件
├── DataManager.* # 数据管理器
├── HistoryManager.* # 历史记录管理
├── LayoutTestWindow.* # Qt布局管理最佳实践演示
├── PathResult.* # 路径结果数据结构
├── GridPoint.* # 网格点数据结构
└── Common.h # 公共定义和常量
├── HistoryManager.* # 历史记录管理
├── PathResult.* # 路径结果数据结构
├── GridPoint.* # 网格点数据结构
└── Common.h # 公共定义
- Qt 5.x/6.x 或更高版本
- C++14/17 支持的编译器
- CMake 3.16+ 或 qmake
cd QWeight_demo
qmake QWeight_demo.pro
makecd QWeight_demo
mkdir build && cd build
cmake ..
make# Windows
./QWeight_demo.exe
# Linux/macOS
./QWeight_demo- 设置网格: 在控制面板中调整网格大小(支持最大50x50)
- 设置起点: 点击"设置起点"按钮,然后在网格中点击设置起始点(绿色圆圈)
- 设置终点: 点击"设置终点"按钮,然后在网格中点击设置目标点(红色圆圈)
- 开始计算: 点击"开始计算"按钮执行哈密顿路径搜索
- 查看结果: 在右侧结果列表中实时查看找到的哈密顿路径
- 停止计算: 点击"停止"按钮立即终止计算并重置
- 异步计算: 最多支持5000条哈密顿路径的并发计算
- 实时显示: 计算过程中实时显示找到的路径数量和进度
- 数据持久化: 自动保存计算结果,支持XML、SQLite、CSV格式
- 历史管理: 完整的计算历史记录和结果管理
- 布局演示: 集成Qt布局管理最佳实践演示(工具菜单)
- 路径可视化: 精美的箭头和颜色编码展示路径
- 哈密顿路径: 程序专门计算哈密顿路径,即访问所有可通行节点恰好一次的路径
- 性能优化: 采用多线程异步架构,大规模计算时UI保持响应
- 强制停止: 停止按钮采用线程终止机制,确保不会出现卡死情况
Ctrl+S: 保存当前结果Ctrl+N: 清空当前网格F5: 重新计算路径
<?xml version="1.0" encoding="UTF-8"?>
<PathResults>
<Result>
<StartPoint x="0" y="0"/>
<EndPoint x="5" y="5"/>
<PathLength>10</PathLength>
<CalculationTime>15</CalculationTime>
<Path>
<Point x="0" y="0"/>
<Point x="1" y="0"/>
<!-- 更多路径点 -->
</Path>
</Result>
</PathResults>path_results: 主结果表path_points: 路径点详细信息表
项目实现了经典的深度优先搜索算法用于路径查找:
- 时间复杂度: O(V + E),其中V是顶点数,E是边数
- 空间复杂度: O(V)
- 特点: 能够找到从起点到终点的路径,但不保证是最短路径
- 适用场景: 适合探索所有可能路径或在稠密图中快速找到解
- 采用参考专业图形库的箭头算法
- 实现一笔画风格的流畅箭头
- 箭头宽度为两点距离的1/7,视觉效果最佳
- 支持抗锯齿渲染,显示效果平滑
- 基于深度优先搜索(DFS)的哈密顿路径实现
- 支持访问所有可通行节点恰好一次的路径计算
- 最多可找到5000条不同的哈密顿路径
- 智能回溯算法,确保计算效率
- QThread工作线程与主UI线程分离
- QQueue队列机制实现线程安全的数据传递
- 强制停止机制:线程terminate + 重新创建
- 100ms定时器批处理优化UI响应
- 自动检测并适配XML、SQLite、CSV格式
- 支持增量数据保存和加载
- 提供数据完整性验证
- 智能的网格大小恢复功能
- ✅ 哈密顿路径专业算法实现
- ✅ 异步多线程计算架构
- ✅ 强制停止和线程重建机制
- ✅ 5000条路径限制和实时显示
- ✅ Qt布局管理最佳实践演示
- ✅ 禁用暂停按钮,简化操作流程
- ✅ 基础路径计算功能
- ✅ 美化的箭头显示效果
- ✅ 多格式数据持久化
- ✅ 响应式用户界面
- 网格规模: 支持最大50x50网格(2500个节点)
- 并发路径: 最多计算5000条哈密顿路径
- 计算速度: 实时显示计算进度和找到的路径
- 内存使用: 优化的数据结构,支持大规模计算
- UI响应: 异步架构确保UI始终流畅
- 停止响应: 强制停止机制,1秒内响应
- 数据处理: 100ms批处理,平衡性能与响应
欢迎提交Issue和Pull Request来帮助改进项目!
- 克隆仓库:
git clone https://github.com/caixuf/QWeight_demo.git - 安装Qt开发环境(Qt5.x或Qt6.x)
- 配置C++14/17编译环境
- 运行测试确保功能正常
- 遵循现有的代码风格和架构
- 添加适当的注释和文档
- 确保新功能有相应的测试
- 提交前运行完整的编译测试
- 多线程代码需要特别注意线程安全
本项目采用MIT许可证,详见 LICENSE 文件。
-
主要开发者: caixuf
-
算法支持: 哈密顿路径算法基于经典图论实现
-
UI框架: 基于Qt框架的现代化界面设计
-
特别致谢: 感谢Qt社区提供的丰富文档和示例
-
caixuf - 项目创建者和主要维护者
- Qt框架提供的强大GUI支持
- 参考了专业图形库中的箭头渲染算法
- 感谢所有贡献者的支持和建议
如果这个项目对您有帮助,请给它一个⭐️!
