前言
在学习osg的时候养成一个习惯,就是一边学习一边打开自制的帮助文档,看着源码,一边去编码。然后结合很久之前就想学习Qt源码,拿到一份Qt类图之类的,对Qt学习实践进行一些总结。所以趁此机会,鼓捣了一下Qt中如何使用源码的做法。 此处实名感谢Qt开源社区群的の大佬,尽心尽力地给出许多有用的建议,一步一步进行指导。
实践
做法一
基于从osg处学来的操作,我先是利用doxygen扫描Qt的源码(这里默认已经添加了Qt Src组件),生成一份.chm的帮助手册。 这个做法的优点是,可以即时查看源码,查看类图,比如想用到QImage类,那直接索引QImage,查看API,查看实现,查看继承关系,相类似的类等等,是一种将实践工作与学习结合在一起的方法。 …But,跟osg源码组织形式不一样,Qt源码的组织结构非常复杂,各种调用封装很绕,不是直接一个文件夹下.h.cpp扫描就行了,而且还有许多类似于example之类的文件,导致扫描正则很难写,扫描速度很慢。(编译了一天一夜了,还在编译,大小在3G+),以后完成了效果不错再补充一份DoxygenFile. 做法一被我放弃了…编译了两天还没成功,我电脑可能先炸..不过好像可以续编译,以后有时间继续吧… 做法一的替代:找到一个挺不错的网站,就是Qt的源码树,在实时查找翻看源码时挺实用的(https://code.woboq.org/qt5/)
做法二
一个折中的做法是调试进入源码。 关键是:Qt Src文件,以及pdb文件。
获取PDB:
- 从https://download.qt.io/下载Qt对应版本的pdb文件,有部分可直接下载,如:
- 如果没有打包的pdb,可换个路径查找具体的pdb,如我的Qt5.12.1+msvc2017_64配置的:https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5121/qt.qt5.5121.debug_info.win64_msvc2017_64/。可下载所有pdb,或者选择需要的模块。
- 除此之外,还有一种更为简便的方法获取pdb文件,就是通过Qt的MaintenaceTool工具。参考链接:https://blog.simbot.net/index.php/2019/07/28/qt-debug-symbols/ MaintenaceTool工具经常出现版本低于3.0.6之类的报错,我的做法是,删除储存库中所有非默认储存库,在出现报错后,点击ok返回,重新点击更新组件,这时可以更新MaintenaceTool,更新以后就能使用了。(更新后还会继续报错版本过低,用上述方法,ok返回,不管它即可,
这时bug啊)
处理PDB
- 下载好PDB之后,解压,放到同一个文件夹(即所有.pdb放在一起),我解压后pdb主要分在bin和lib两个文件夹,这也没关系,添加两个路径即可。
在Qt creator中工具->调试器->CDB Paths,添加上述路径(这里默认已经配置好CDB,若没有CDB,建议重装或参考相应的教程):
- 同理,在vs中也同样,工具->选项->调试->符号添加路径即可:
添加Qt源码
此时,成功调试进入源码部分。
总结
回味了一下,其实实时查看源码这个操作的确不应该被直接支持(指的是在代码里通过ctrl+左键查看)。因为我们的工程不可能包含Qt整个源码工程,自然链接不到。(这里据说可以通过在qt creator同时打开源码的qt.pro项目,即可实时查看源码,但本人一直用不了该项目,各种报错。因为没有刚需,暂时不研究了)。 而一方面直接通过qt assist查看Qt提供的API,一方面要深入研究时通过源码树网站跳转至相应的源码介绍页面(包括直接的源码,以及详细介绍,相关链接,类图等等)。另一方面调试时也能深入qt的逻辑层次,更好判断自己的应用是否正确。这似乎已经达到预期的目标了。