Qt核心剖析: 寻找 QObject 的源代码
本来打算把《Qt学习之路》作为一个类似教程的东西,所以就不打算把一些关系到源代码的内容放在那个系列之中啦。因此今天就先来看一个新的开始吧!这个系列估计不会进展很快,因为最近公司里面要做 flex 的项目演示,所以时间不是很多啦,并且源代码也不是那么容易看的。豆子也不是 C/C++ 出身,因此看起来也会有些麻烦。
《Qt源码剖析》作为一个独立的系列,大致就是对Qt的源代码进行分析。个人以为,分析的目的不在于你去写一个Qt出来,而是学习它的设计巧妙之处。正如我们去学习编译器的设计与实现,也并不是非要写一个编译器出来,而是学习到很多有用的算法和设计思路。这些才是更加需要注意的,也是比起写一个Qt更为现实的。
《Qt源码剖析》就不作为一个循序渐进的系列啦!因为源代码看起来也不可能会有一个循序渐进的过程,只能看多少说多少。但是豆子还是会努力把要说的东西表达清楚的!
当然,这么一个系列肯定少不了站在巨人的肩膀上去看问题。下面列出一些类似的系列:
同很多源代码剖析的文章一样,这个系列可能让初学者看不明白,不过有兴趣的童鞋也要去各处学习下啊~
下面我们要说的第一个问题是,哪里能找到Qt源代码。
不出意外的话,你安装的Qt应该是 LGPL 版本的。这个版本已经包括了完整的Qt源代码。下面打开你的Qt安装目录,你会看到2010.02.1这样的时间作为名称的目录,这就是Qt的版本号。4.6.1版对应的日期目录就是2010.02.1.进入这个目录,里面有一个 qt 目录,在这个 qt 目录中,你会找到 src 目录。这里面就是完整的 Qt 源代码。我们所要分析的代码,你就可以在这里找到啦!
下面我们从 QObject 这个最主要的类开始说起。
按照前面我们说过的路径,我们进入 qt/src 文件夹。你可能对这里的目录名时曾相识,因为几乎这里的所有文件夹名都对应着 Qt 的模块的名字:gui,network,multimedia等等。我们从最核心的 QtCore 开始。这个模块对应的是corelib文件夹。
首先我们要去寻找 QObject 这个类。之所以选择 QObject,一是因为它是 Qt 的核心类,另外一个很重要的原因是,QObject类是一个典型的Qt类,我们可以通过这个类学习到Qt的设计思路。
回忆一下我们编写 Qt 代码的时候,使用的语句是
- #include <QObject>
当我们进行 #include 语句时,预处理器寻找的是qt/include/QtCore这个目录。我们在这里面找到了 QObject 文件,而这里面只有一个语句:
- #include "qobject.h"
然后我们在同一个目录下又找到了这个 qobject.h,这里面也只有一句:
- #include "../../src/corelib/kernel/qobject.h"
而这个路径就是我们前面找到的那个 qobject 所在的位置!
因此我们回到在 corelib 里面,可以看到 kernel 文件夹。看到名字就应该知道,这就是Qt corelib 的核心。在这里面,我们可以找到有四个文件以 qobject 打头:
- qobject.h:QObject 的类定义,这个就是 QObject 文件引用的文件,也就是我们使用的实际头文件;
- qobject.cpp:QObject的实现代码;
- qobjectdefs.h:这个文件中定义了很多用到的宏,并且定义了QMetaObject类,而这个类是实现signal- slot的基础;
- qobject_p.h:对 QObject 的辅助数据类;
实际上我们还会看到另外两个文件:qobjectcleanuphandler.h 和 qobjectcleanuphandler.cpp。不过如果打开这两个文件就会发现,这里面定义的是一个QObjectCleanupHandler 类,而这个类是继承了 QObject 的,因此这只是一个普通的工具类,不在我们目前的讨论之列。因此我们可以认为,QOjbect 类是由4个文件共同实现的:qobject.h,qobject.cpp,qobjectdefs.h和qobject_p.h。
本文出自 “豆子空间” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/322343
Qt核心剖析: 寻找 QObject 的源代码的更多相关文章
- Qt核心剖析:信息隐藏
原文 http://devbean.blog.51cto.com/448512/326686 (一) 如果你阅读了 Qt 的源代码,你会看到一堆奇奇怪怪的宏,例如 Q_D,Q_Q.我们的Qt源码之旅就 ...
- Qt核心剖析: moc
前面我们说过,Qt 不是使用的“标准的” C++ 语言,而是对其进行了一定程度的“扩展”.这里我们从Qt新增加的关键字就可以看出来:signals.slots 或者 emit.所以有人会觉得 Qt 的 ...
- Qt核心剖析:信息隐藏(三篇)
http://devbean.blog.51cto.com/448512/335550 http://devbean.blog.51cto.com/448512/325581 http://devbe ...
- QT核心编程之调试技术 (g)
Qt应用程序的调试可以通过DDD进行跟踪调试和打印各种调试或警告信息.DDD(Data Display Debugger)是使用gdb调试工具的图形工具,它安装在Linux操作系统中,使用方法可参考D ...
- Qt核心机制与原理
转: https://blog.csdn.net/light_in_dark/article/details/64125085 ★了解Qt和C++的关系 ★掌握Qt的信号/槽机制的原理和使用方法 ★ ...
- Qt核心机制和原理
转:http://blog.csdn.net/light_in_dark/article/details/64125085 ★了解Qt和C++的关系 ★掌握Qt的信号/槽机制的原理和使用方法 ★了解Q ...
- QT核心编程之Qt线程 (c)
QT核心编程之Qt线程是本节要介绍的内容,QT核心编程我们要分几个部分来介绍,想参考更多内容,请看末尾的编辑推荐进行详细阅读,先来看本篇内容. Qt对线程提供了支持,它引入了一些基本与平台无关的线程类 ...
- Qt写的截图软件包含源代码和可执行程序
http://blog.yundiantech.com/?log=blog&id=14 Qt写的截图软件包含源代码和可执行程序 http://download.csdn.net/downloa ...
- 剖析Qt的事件机制原理(源代码级别)
在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使Qt程序进入消息循环.下面我们就到exec()函数内部,来看一下他的实现原理.Let's go ...
随机推荐
- HDU1029时钟(排序)
题意:是用两个指针的一个模拟时钟的时针和分针.两个指针形成一个角度.角度测量两个指针之间的最小角度.两只手之间的角度是大于或等于0,且小于或等于180度的度量.由于一个序列的五个不同的写入时间,格式为 ...
- iOS获取运营商信号强度
此API是apple私有API,所以只可运用在越狱设备中,如果提交appstore,会遭遇apple的拒绝上架反馈! #import <dlfcn.h> int getSignalLeve ...
- BlogUI的使用
- tomcat使用所遇到的问题
1.在使用eclipse添加server的时候添加不了tomcat服务器: 如图左图所示,添加按钮已成灰色,无法操作. 解决办法:找到workspace的工作空间->.metadata-> ...
- 条款21: 必须返回对象时,不要强行返回对象的reference
总结: 绝不要返回一个local栈对象的指针或引用:绝不要返回一个被分配的堆对象的引用:绝不要返回一个静态局部对象(为了它,有可能同时需要多个这样的对象的指针或引用). 条款4中给出了“在单线程环境中 ...
- C# Socket select模型
http://www.cnblogs.com/Clingingboy/archive/2011/07/04/2097806.html http://www.cnblogs.com/RascallySn ...
- OCP-1Z0-053-V13.02-712新题
Why does the number of blocks for the table remain the sale after the shrink operation? A.Because ...
- Python之路Day18
今天主要内容:Django Form.Django Admin.Django进阶 Django Admin 自带的验证: Django Admin的定制 Django Admin 自定义actions ...
- Collection用法
Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Queue接 口.在队列这种数据结构中,最先插入的元素将是最先被删除的元素:反之最后插入的元素将 ...
- Multiple markers at this line @Override的解决方法
Multiple markers at this line - implements java.awt.event.ActionListener.actionPerformed - The metho ...