QT中的Q_D指针与Q_Q指针
Q_D指针主要是为了二进制兼容问题。
一、Q_D指针
主类获取其私有类的指针。
Q_D宏的定义是这样的:
这里可以看到,使用Q_D宏之后使用的d,其实是私有类的指针。再来看看d_func()
。
整个d_func()
的作用就是获取这个这个类里面的d_ptr
。
每个类都会在头文件中添加这个宏,这样使用d_func()
的时候就会返回自己的私有类的指针。
那这个d_ptr是在哪里定义的呢?是在qobject
类里面。
这个QScopedPointer
是qt中的智能指针。
总结一下,d_func()
就是获取这个类私有类的指针,主要作用是二进制兼容用。
二、Q_Q指针
私有类获取其主类指针。
Q_Q宏的定义是这个。
而q_func()
是在这个宏里面定义的:
这个宏通常是在类的私有类中使用。
看q_func()
的具体实现,是获取普通类的指针,结合这个宏在私有类中的定义,那么Q_Q指针的用法就了然了,就是私有类获取普通类指针。
那么这个q_ptr
是在哪里定义的呢?
QObjectPrivate
继承了QObjectData
,这个q_ptr
就是在这里定义的。
总结一下,Q_Q
指针是私有类获取主类指针用的。