这是一个简易的绘图项目,基于 QT 的 QGraphicsView 开发,会陆续开发一些图形相关的功能
- 移动画布:按住鼠标中键并移动
- 缩放画布:拖动右侧滑块
- 旋转画布:拖动底部滑块
- 删除选中图形:Delete
- 绘制多段线:P 键开始,鼠标拾取顶点,右键结束、C 键闭合、Esc 取消绘制
- 绘制包围盒:选中图形后按 B 键
支持 ctrl+s 保存文档
- 打开文档、保存文档
- 本项目使用 CMake 构建,需要安装 QT
- Windows 系统,请在环境变量中提供 QT 路径,如"D:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin"
目录 | 说明 |
---|---|
control | 图形控制层,对图形的操作 |
data | 图形数据的序列化、反序列化等 |
graphics | 自定义实体层 |
utility | 工具函数 |
view | 整个模型的视图 |
- 支持添加自定义图形:请从 IGeGraphic 派生子类,并实现相关虚函数
- 文档序列化采用第三方库 kiwi,你只需要提供包含各个字段的模式文件,它会自动生成各语言的编解码代码
- 字段描述文件(xxx.kiwi)
- 你的图形继承体系下的所有父类、子类的成员变量应该放在同一个 struct 内,这是和结构化数据流最大的不同
- message 中的成员由 flag 管理,可以只保存修改的字段;struct 中的字段必须全部提供,适用于固定不变的数据,比如二维点结构,不能缺了 x 或 y
- message 中的数字只是一个递增的序号(kiwic 编译时,这里经常报错)
- 不同版本的字段变更,对于会写入磁盘或远程服务器的数据,要向前兼容只能新增字段,不能删除字段(这只会浪费一个指针的内存)
- 利用 kiwic 生成 C++的序列化、反序列化代码
- 安装 kiwic 时,要以管理员身份启动命令提示符 CMD:npm install -g kiwi-schema
- cd 到 schema.kiwi 文件所在位置(data 目录):kiwic --schema schema.kiwi --cpp schema.h
- 将已生成的 schema.h 文件中的实现部分放到 schema.cc 中,搜"#ifdef"即可定位到
- 收缩宏包围的代码段,剪切到源文件中,注意要在相同命名空间下(sindyk),并包含 schema.h
- 序列化采用非侵入式设计,主要基于访问者模式,核心在于子类实现了 visit 函数
- 字段描述文件(xxx.kiwi)
- 如有其它技术问题,请联系 QQ 群:571208653
- 如果觉得不错,请点击 Star 让更多人看到