Qt的D和Q指针

Qt的D和Q指针,第1张

Qt的D和Q指针

Qt的D指针和Q指针,实际上就是一个类的成员指针变量,改变量指向另一个Private类对象,这个Private类对象中包含了一系列的成员和函数。

这样做的目的:1.可以对外隐藏数据内容。2. 防止改变类的数据模型,从而做到二进制兼容。

Q_DECLARE_PUBLIC提供一个q_func q_ptr Q_Q,一般是在XXXPrivate类中使用,需要自己声明 XXX* q_ptr
Q_DECLARE_PRIVATE提供一个d_func d_ptr Q_D,一般是在XXX类中使用,需要自己声明XXXPrivate* d_ptr
Q_DECLARE_PRIVATE_D同上,然后声明XXXPrivate* 任意名称;

D指针的具体实现宏 

define Q_DECLARE_PRIVATE(Class) 
  inline Class##Private* d_func() {return d_ptr;}
friend class Class##Private;	

#define Q_DECLARE_PRIVATE_D(Dptr, Class) 
 inline Class##Private* d_func(){return Dptr;} 
 friend class Class##Private;
 
#define Q_DECLARE_PUBLIC(Class)                                    
    inline Class* q_func() { return static_cast(q_ptr); } 
    inline const Class* q_func() const { return static_cast(q_ptr); } 
    friend class Class;

#define Q_D(Class) Class##Private * const d = d_func()
#define Q_Q(Class) Class * const q = q_func()

d_ptr  q_ptr

而Q指针,实际上就是在Private类中的指针,就是指向那个暴露给用户的类。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5713979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存