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类中的指针,就是指向那个暴露给用户的类。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)