Qt中的Q_D宏和d指针
Posted microthink
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt中的Q_D宏和d指针相关的知识,希望对你有一定的参考价值。
Q_D的设置意在方便地获取私有类指针,文件为qglobal.h。
1 #define Q_D(Class) Class##Private * const d = d_func()
d_func()函数如下实现:
1 #define Q_DECLARE_PRIVATE(Class) 2 inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(qGetPtrHelper(d_ptr)); } 3 inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(qGetPtrHelper(d_ptr)); } 4 friend class Class##Private;
这里的d_func()虽然在宏里面,但是如果代入具体的类型,这里面就变成了以Class##Private的私有类指针为返回值,以func为函数名的函数。这里的qGetPtrHelper是
1 template <typename T> static inline T *qGetPtrHelper(T *ptr) { return ptr; }
这个模板函数里面里的T要套入Class##Private这个具体的类。上面的那个Q_DECLARE_PRIVATE里面的就成了这个模板类的一个声明。
在QObject类里面存在一个成员变量,d_ptr指针,定义如下:
1 QScopedPointer<QObjectData> d_ptr;
以上是关于Qt中的Q_D宏和d指针的主要内容,如果未能解决你的问题,请参考以下文章