2026.1.12随笔:实习第十六天(改bug,添加新建项目,打开项目功能)
今天上来就在看上星期那个下拉框覆盖的bug:
- 点击下拉框,无对应选项
- 不是必现
- 这是一个Z-order + Native Window + Popup 时序问题,受窗口管理器、GPU 驱动、渲染调用时机、焦点/激活事件和事件循环调度影响,因此会呈现偶发性(非必现)
我改着改着发现下面的工具栏也被我搞不见了,之后发现是一个Qt + VTK 的结构性问题,不是 bug,踩到的是所有人都会踩的 VTK 坑。只需要把QVTKOpenGLNativeWidget换成QVTKOpenGLWidget,但QVTKOpenGLWidget是VTK9才正式引入并主推的,恰好我们使用的VTK版本就是VTK9,但是并没有在include目录下找到QVTKOpenGLWidget.h头文件

然后我问mt需不需要重新编译一下VTK,mt说不用,提交代码后让我做新建项目和打开项目的内容
mt原话:
后面你可以做一下这个软件的新建、打开吧,打开就是读取那个目录底下的参数文件和渲染的一些文件,给他同步到数据类里,如果有边界条件、网格和结果那些文件的话,就给他渲染到那些窗口里(恢复)。新建就是先清理那些当前一些显示的窗口什么的,然后调用打开项目的逻辑。你可以先看看那个ACLNP软件的项目管理相关的代码
上午剩下的时间都在看ACLNP这个部分的相关代码,我发现其他软件在新建项目和打开项目这一块都是直接新建,没有把旧项目的东西先清除。
我下午要做的应该就是添加旧项目窗口清除这个功能,还有就是打开后将参数文件同步到参数类里面,将有的数据渲染到窗口
就是在新建项目的时候把旧项目的窗口清除这个功能,我看LNP那里是在DataManager用一个成员变量保存了一个“右侧已打开的标签页元数据”,然后在新建项目的时候遍历这个List,发送sig_removeMainWindowRightTabWidget信号关闭
然后我就先没有存标签页数据,直接在打开项目的时候硬编码先试一下,发现sig_removeMainWindowRightTabWidget这个信号并不能去掉右边的标签页



之后mt说是不是没连接这个信号sig_removeMainWindowRightTabWidget啊,让我全局搜一下,看你这个软件里是不是缺了对这个信号关联的一些操作。之后发现果然就是这个原因
之后我问:“那要不要像LNP那边一样搞一个List存起来,或者这样硬编码”(我就多余问这一嘴)
mt原话:
要不也存起来吧,你可以熟悉一下Json的读写,只不过你这块没有别的其他的参数,我们这默认打开项目的时候,都会创建一个pro.json
,你看你那创建新项目之后,目录底下有没有一个叫pro.json文件,你可以在这个里面写入和读取那个窗口相关的信息,你可以先看看这个文件在哪生成的
然后我就开始熟悉json(之前虽然有接触过),看了一下这个文件在哪里创建的。
md我写了半天,看了半天,发现咋和我学的json不一样,好多json头文件都没有,结果tmd这个项目它自己又tm封装了一套json的东西,然后想着能用现成的,我又在看项目里面封装的json函数jsonRead和jsonAdd

写入时发生乱码,我没招了。Ai说是应为下面的jsonadd封装产生的乱码,然后我就没有用中文,直接用英文。
最后终于把用json把当前的OpenedTab写到pro.json文件里面了
现在编译器找不到我cpp文件里面的函数实现
- 函数只写了声明,没写实现(pass)
- 实现写了,但签名不一致(最隐蔽)(pass)
- 实现写在 cpp,但这个 cpp 没被编进 DLL(pass其他函数都能找到)
- DLL 导出宏没加(pass)
原来是我没有声明类作用域~
最后折腾了半天,没有用jsonadd那一套,然后反正就是能跑就行,不想再去优化了。

今天没咋摸鱼,上班的时候还是要摸点鱼,已经燃尽了。