# LocalFlow 功能改进说明 本次更新实现了四个主要功能改进,提升了用户体验和工作流管理效率。 ## 1. 节点浏览器拖拽功能 ### 功能描述 - 用户可以从左侧节点浏览器直接拖拽节点到画板中 - 支持所有5种节点类型:变量赋值、变量计算、SQLite连接、SQLite执行、SQL语句 ### 实现细节 - **文件**: `src/views/node_browser.py`, `src/views/workflow_canvas.py` - 启用 `QListWidget` 的拖拽功能 - 使用 `QMimeData` 传递节点类型信息 - 画布接收拖拽事件并在放置位置创建节点 ### 使用方法 1. 在左侧节点浏览器中选择节点 2. 按住鼠标左键拖拽到画板 3. 释放鼠标完成节点添加 --- ## 2. 画板节点删除功能 ### 功能描述 - 支持两种删除方式:键盘快捷键和右键菜单 - 删除节点时自动清理相关连接线 - 删除后自动更新属性面板 ### 实现细节 - **文件**: `src/views/node_graphics.py`, `src/views/workflow_canvas.py`, `src/views/workflow_tab_widget.py` - 添加 `keyPressEvent` 处理 `Del` 和 `Backspace` 键 - 增强 `delete_node` 方法,自动删除所有端口连接 - 添加 `node_deleted` 信号通知工作流标签页清理数据 ### 使用方法 1. **键盘删除**:选中节点后按 `Delete` 或 `Backspace` 键 2. **右键删除**:右键点击节点,选择"删除节点" ### 特性 - 删除节点时自动清理输入输出端口的所有连接线 - 从节点字典和连接列表中移除相关数据 - 如果删除的是当前选中节点,自动清空属性面板 --- ## 3. 节点属性面板更新优化 ### 问题描述 当用户快速连续点击多个节点时,属性面板更新不及时,可能显示错误的节点信息。 ### 解决方案 - **文件**: `src/views/node_properties.py` - 使用 `QTimer` 实现延迟加载机制 - 设置 50ms 的延迟,快速切换时取消之前的加载请求 - 避免重复加载同一个节点的属性 ### 实现细节 ```python # 延迟加载机制 self._load_timer = QTimer(self) self._load_timer.setSingleShot(True) self._load_timer.timeout.connect(self._do_load_node_properties) # 快速切换时,只处理最后一个节点 def load_node_properties(self, node_id, node_type, config): self._load_timer.stop() # 取消之前的定时器 self._pending_load = (node_id, node_type, config) self._load_timer.start(50) # 50ms 后加载 ``` ### 效果 - 快速点击多个节点时不会卡顿 - 始终显示最后选中节点的属性 - 避免不必要的UI重建 --- ## 4. 首页工作流列表展示 ### 功能描述 - 首页以卡片形式展示所有已保存的工作流 - 支持打开和删除工作流 - 保存工作流后自动刷新首页列表 ### 实现细节 - **文件**: `src/views/overview_widget.py`, `src/core/workflow_executor.py`, `src/views/workflow_tab_widget.py` #### 工作流卡片(WorkflowCard) - 220x180 像素的卡片设计 - 显示工作流名称和图标 - 提供"打开"和"删除"按钮 - 鼠标悬停时高亮显示 #### 工作流列表 - 网格布局,每行最多4个卡片 - 自动扫描 `workflows/` 目录 - 只显示包含 `workflow.json` 的工作流 #### 打开工作流 - 加载节点配置和位置信息 - 重建节点图形项和连接线 - 在新标签页中打开 #### 删除工作流 - 删除前弹出确认对话框 - 删除整个工作流目录 - 自动刷新列表 ### 节点位置保存 保存工作流时现在会保存节点的位置信息: ```json { "workflow_name": "工作流 1", "nodes": [ { "node_id": "node_123", "node_type": "variable_assign", "config": {...}, "position": {"x": 100.0, "y": 200.0} } ], "edges": [...] } ``` ### 使用方法 1. **查看工作流**:首页自动显示所有已保存的工作流 2. **打开工作流**:点击卡片上的"打开"按钮 3. **删除工作流**:点击"删除"按钮,确认后删除 4. **刷新列表**:保存新工作流后自动刷新 --- ## 文件修改清单 ### 新增文件 无 ### 修改文件 1. **src/views/node_browser.py** - 添加拖拽支持 - 实现 `startDrag` 方法 2. **src/views/workflow_canvas.py** - 添加拖放事件处理 - 添加键盘删除功能 - 新增 `node_deleted` 信号 3. **src/views/node_graphics.py** - 增强节点删除功能 - 自动清理端口连接 4. **src/views/node_properties.py** - 添加延迟加载机制 - 优化快速切换性能 5. **src/views/overview_widget.py** - 完全重写 - 添加工作流卡片组件 - 实现工作流列表加载和管理 6. **src/views/workflow_tab_widget.py** - 添加节点删除处理 - 保存节点位置信息 - 保存后刷新首页 7. **src/core/workflow_executor.py** - 支持保存节点位置 - 修改 `save_workflow` 方法签名 --- ## 测试建议 ### 拖拽功能测试 1. 打开应用,点击左侧工具栏"节点浏览器"按钮 2. 将各种节点拖拽到画板中 3. 验证节点在放置位置正确创建 ### 删除功能测试 1. 创建若干节点并建立连接 2. 使用 `Delete` 键删除节点 3. 验证节点和连接线都被删除 4. 使用右键菜单删除节点 5. 验证属性面板正确更新 ### 属性面板测试 1. 创建多个节点 2. 快速连续点击不同节点 3. 验证属性面板显示正确的节点信息 4. 无卡顿或闪烁现象 ### 首页工作流测试 1. 创建并保存多个工作流 2. 返回首页,验证所有工作流都显示 3. 点击"打开"按钮,验证工作流正确加载(包括节点位置) 4. 点击"删除"按钮,确认后验证工作流被删除 5. 验证保存新工作流后首页自动刷新 --- ## 技术亮点 ### 1. 拖放系统 使用 Qt 的 Drag & Drop 框架,通过 `QMimeData` 传递数据,实现跨组件的交互。 ### 2. 延迟加载 使用单次定时器 (`QTimer.SingleShot`) 实现防抖功能,优化快速操作时的性能。 ### 3. 信号机制 充分利用 Qt 的信号槽机制,实现组件间松耦合通信: - `node_added` - 节点添加 - `node_selected` - 节点选中 - `node_deleted` - 节点删除 - `connection_created` - 连接创建 - `properties_updated` - 属性更新 ### 4. 数据持久化 扩展 JSON 格式,保存节点位置信息,实现完整的工作流序列化和反序列化。 --- ## 用户体验提升 1. **更直观的节点添加**:拖拽比双击更符合用户直觉 2. **快捷的节点删除**:键盘快捷键提高操作效率 3. **流畅的界面响应**:延迟加载消除卡顿 4. **完整的工作流管理**:首页集中管理所有工作流 --- ## 下一步改进建议 1. **工作流缩略图**:在首页卡片上显示工作流预览图 2. **工作流搜索**:添加搜索框过滤工作流 3. **工作流排序**:按名称、创建时间、修改时间排序 4. **工作流重命名**:直接在首页重命名工作流 5. **批量操作**:支持批量删除、导出工作流 6. **工作流标签**:为工作流添加标签分类 7. **最近打开**:记录并显示最近打开的工作流 8. **多选节点**:支持框选和批量删除节点