码迷,mamicode.com
首页 > 其他好文 > 详细

Qt中的Q_D宏和d指针

时间:2018-07-09 00:34:30      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:temp   成员变量   类型   设置   私有   成员   erp   vat   get   

  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指针

标签:temp   成员变量   类型   设置   私有   成员   erp   vat   get   

原文地址:https://www.cnblogs.com/microthink/p/9281848.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!