Kimi建议的学习节奏
下面给你一份“一站式学习路线图”,把你要的
「Scene-View-Item + Menubar + Shortcut + 鼠标/多点触控」
全部串成一条可验证的动手路径;每完成一个里程碑就能跑通一个 demo,保证不迷路。
阶段 0 环境 & 起步(0.5 天)
- 安装 PySide6
python -m pip install pyside6
- 跑通官方「Drag & Drop Robot」示例(纯 C++ 没关系,只看交互逻辑)
位置:<pyside6>/examples/widgets/graphicsview/dragdroprobot
目标:确认事件链、拖放、快捷键、手势都已编译可用 。
阶段 1 Scene-View-Item 骨架(1 天)
目标:10 万节点也能 60 FPS 的「无限画布」
任务清单(按顺序 commit):
任务 | 关键点 | 自检标准 |
---|---|---|
① 创建 GraphView 继承 QGraphicsView | 打开 OpenGL 抗锯齿、设置 NoDrag 自己接管平移 |
滚轮可缩放 |
② 创建 GraphScene 继承 QGraphicsScene | 重写 sceneRectChanged 信号,动态扩大画布 |
拖到边缘自动扩区 |
③ 写 BaseNode 继承 QGraphicsItem | 只实现 boundingRect + paint + shape |
10 万个节点 FPS ≥ 60 |
④ 加 itemChange 钩子 |
监听 ItemPositionChange 实现「自动对齐网格」 |
拖动节点贴网格 |
完成后你拥有:
- 单文件
< 200 行
的“高性能画布”模板 - 明白「虚函数」与「自己函数」区别(paint vs zoom)
阶段 2 Menubar & Shortcut(0.5 天)
目标:macOS 全局菜单栏 + 窗口级快捷键,不硬编码
任务:
任务 | 关键点 | 自检标准 |
---|---|---|
① 主窗口用 QMainWindow | 菜单栏 self.menuBar() ;不用无父 QMenuBar |
菜单出现在系统栏 |
② 命令总线 | 所有 QAction 只发「命令对象」,不直接改 Scene | Undo/Redo 预留接口 |
③ 同步 BundleID | CMake 变量 → configure_file → setDesktopFileName() |
换 bundle 仍能用 |
④ 快捷键表外置 | QKeySequence 放 JSON,同一套在 menubar & 自定义 Shortcut 复用 |
修改热键不编译 |
完成后你拥有:
- 单点维护的菜单-快捷键表(JSON 1 份,CMake 变量 1 份)
- 明白「虚函数 vs 信号」:
triggered
→ 发命令 → Scene 执行
阶段 3 鼠标 + 多点触控(1 天)
目标:同一套代码,触控板捏合、Magic Mouse 滚轮、外接屏触控 都能用
任务:
任务 | 关键点 | 自检标准 |
---|---|---|
① 手势注册 | view.grabGesture(Qt.PinchGesture | Qt.PanGesture) |
两指捏合/滑动都进 gestureEvent |
② 统一坐标系 | 所有手势先 mapToScene → 再处理 |
换 View 仍同步 |
③ 触控-鼠标无缝 | 滚轮 = 缩,按住中键 = 平移;手势 = 同样命令 | 操作录像可回放 |
④ 触控反馈 | QPinchGesture.scaleFactor() → 实时改 view.transform() |
60 FPS 不跳帧 |
完成后你拥有:
- 一套变换命令(ZoomCommand / PanCommand)同时服务滚轮、触控板、外接触屏
- 明白
event()
兜底 vs 具体虚函数:gestureEvent
没有专属虚函数,只能event
里拦截
阶段 4 综合 Demo(1 天)
目标:把前面全部串成可安装 .app
功能:
- 10 万节点流程图编辑器
- 系统栏菜单 + 自定义快捷键(JSON 可热重载)
- 滚轮/捏合/滑动/Shift-拖拽框选
- macOS 签名 & notarization 通过
完成后你得到:
- 一条 CMake 构建命令 → 生成
.app
→ 拖拽安装 - 整套代码 < 1000 行,日后当模板直接复制
配套资料(按优先级)
-
官方示例(已随 PySide6 安装)
graphicsview/dragdroprobot
→ 事件链 + 拖放
graphicsview/elasticnodes
→ 10 万节点性能范例
touch/fingerpaint
→ 多点触控基础 -
中文速查
简书:qt widgets 中 view scene item的体系
WordPress:Qt Graphics View Framework 中的事件 -
文档深读
Qt 5/6 官方 Graphics View 一章(英文)
重点章节:Event System / Drag & Drop / Gesture & Touch
学习节奏建议
- 每天 1 阶段,晚上 push 到 GitHub,跑通自检点再睡觉;
- 每阶段写完写 5 行 README 记录坑,后期就是自己的“Qt cookbook”。
按这个路线图走,一周后可独立交付“带菜单+快捷键+触控的 Scene-View-App”,后续往里面加业务功能即可。