# QtNodeEditor **Repository Path**: Logic3/QtNodeEditor ## Basic Information - **Project Name**: QtNodeEditor - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-08 - **Last Updated**: 2021-06-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # QtNodeEditor NodeEditor2.0 start at 2021-5-6 准备使用拓扑排序的bfs计算节点运算顺序,visited防止成环 再用递归实现一遍 bfs的递归和非递归实现? 对于森林使用多线程? 初始化基类时依旧使用的是普通指针,是否要改成智能指针?使用.get()对use_count的影响? 函数中间参数是否需要改成指针指针 view中的obj和item因为转换问题无法解决,暂时只能使用普通指针,普通指针的释放问题 点击导致内存增加的问题 上一条:有时候又不增加了 2021-5-16:弃用itemAt查询选择对象 actually start from 2021-2-19 2021-2-18: QtPy尝试编写,2-19换成QtC++ 2021-2-19: 完成网格背景,背景拖拽事件,背景放缩事件 2021-2-20: 完成节点内嵌widget 2021-2-21: 初步完成socket 2021-2-22~2-27: 旅途困扰22,23与消极怠工24(xzz),25(访亲),26,27(复习) 2021-2-28: 完善了socket的表现,调整了节点创建,初步开始edge模块 2021-3-3: 构建了edge的初步连接 2021-3-4: 完成连线跟随移动,完成删除线基础部分 2021-3-9: 通过isUnder完成拖线结束时的判断(用release代替了),但仍需思考怎么查询对应的node和socket 重构:将win中的节点属性迁移到view中,这是一个大的变动,但是正确性尚待商榷 迁移:由于不知道如何让view包含多个scene,曾经只负责绘制背景的editorScene现在也负责绘制节点 2021-3-9: 完成部分拖曳连线的逻辑,剩下contains的问题尚未解决,怀疑是坐标系的问题 2021-3-10: 通过mapToScene解决坐标系的转化,完成连线基础逻辑 需求:更具有扩展性和适应性的节点,需要更好的基础设计和继承结构 2021-3-11:通过temp-edge达成更友好的连线。但实际上也可以通过修改node-edge 有着依旧延迟的问题 2021-3-15:增加了框选功能,初步编写了删除节点的功能,但是内存中还没有释放 2021-3-16: 完善了内存中删除节点与连线,快捷键添加节点 !!!!测试发现内存并没有释放 2021-3-26: 优化曲线表现,使用了Bool限制socket(没有使用边表) 2021-3-27: 初步开始节点继承,通过继承和子类指针赋值给父类对象完成NodeItem的多态 需要完善多socket的问题,拓展数据传递的类型,以及更多节点 2021-3-28: 添加了四则节点,初步完成了struct数据传送,需要更多扩展和debug 尝试增加定时器 2021-3-29: 尝试了将节点创建在鼠标位置,但是只有全屏时才成立,增加了非法连线的处理 剩余需要实现菜单、文件序列化反序列化、历史栈、边表 2021-4-10: 修复节点与连线删除delete的问题 2021-4-23: 迁移环境至qt5.15.2 在测试的时候出现了一次删除崩溃,将要在新版本中重构修复 2021-4-24: 回退环境至qt5.12.10 TODO:设计链式计算线程以对多条节点线路并行计算 TODO:存在计算节点时删除存在崩溃现象,也许是顺序问题?在新版本更改数据时要注意修复 认为删除崩溃是因为传递的是数据的指针,输入没了,数据没了,强行计算自然崩溃,所以在删除输入时要先对后续进行检查,或者之间节点之间不采用指针而是copy数据,当然这样占用内存 经测试,现在删除输出也会崩溃,可能还有其他问题,要思考。可以学习houdini的冻结 打包输出: 取出Release的exe win中搜索Qt(MinGW) 执行 cd(path)> windeployqt NodeEditor.exe 增加qss文件到exe所在目录 优化编译: 选择编译release模式,在pro文件根据优化的需要添加下面的语句 QMAKE_CXXFLAGS_RELEASE += -O # Release -O QMAKE_CXXFLAGS_RELEASE += -O1 # Release -O1 QMAKE_CXXFLAGS_RELEASE += -O2 # Release -O2 QMAKE_CXXFLAGS_RELEASE += -O3 # Release -O3 问题解决: 2021-2-28:修复了Vector append自定义类的问题,原因是应该写成Vector指针 2021-3-9:通过dynamic_cast和isUnderMouse判断点击所在对象 2021-3-11:通过setZValue()调整层级,还需继续调整 2021-3-11:通过hide绕过了连线的渲染bug 2021-3-17:通过setDragMode解决Drag冲突 遗留问题: ***随便移动缩放内存占用就会变多的问题,内存泄漏?以及删除节点和连线但是占用内存并没有减小 思路文档的编写 字体大小问题 在一次删除多个节点与连线时产生了一次崩溃,但是未再出现? NodeItemBase和NodeContentBase是否重复,可以减少一个? 赋值重复问题node_index/out_socket_index 需要for循环增加break以提高效率,以及大量的简单for没有使用算法 2021-3-26:用智能指针替换new? mouse函数中的update似乎没有作用,可以考虑删除 QVector 处new产生的NodeSocket是否要delete 检测paint函数,拷贝构造函数的出现次数,不要导致重复覆盖 *有时候连线paint需要移动视图才会出现(也许Update能解决这个问题?不能) node-view 中的动态转化代码可能不稳定(其实还是挺稳定的) QGraphicsScene::removeItem: item 0x5ba4b60's scene (0x0) is different from this scene (0x2b2f240)(未在出现) 出现了connect无效以及无法连接的bug(未在出现) 节点文本问题(未在出现) already 存在edge item?(未在出现) edge重复new QPainterPath(未在出现) 连线bug(已经解决) 2021-3-26:目前是重写NodeItem,尝试用一个Node基类(已经解决) 3-7尝试在view找寻获得itemAt结果继承类型,失败了(已经解决) 待优化: 如何加入3d渲染视图 如何嵌入图像 网格drawlines改为QVector 寻求更合理的widget嵌套方法 edge边表或者其他数据结构的问题 叉积也是一种判断点是否在形状内的方式,和直接形状比较谁快谁稳定? 修改算法比如搜索算法以获得更高性能 目标: OpenGl/Vulkan的加入(本身qt内嵌了QtOpengl 图像处理的功能(先得载入图像到widget 其他: QVector复制的socket是原来的socket吗,当new时创建的socket显示在item中, 绑定的也是item,但是Qvector复制的socket是否还是遵循item子级的socket? 删除QVector之后,原来new的Socket是否没delete?那就需要重新考虑QVector了