friendclassClass;#defineQ_D(Class) Class##Private * const d = d_func()#defineQ_Q(Class) Class * const q = q_func() Q_DECLARE_PUBLIC 和 Q_DECLARE_PRIVATE 这两个宏一般成对使用,用于实现 PIMPL 设计模式,这样可以达到隐藏实现的目的。 2 实际案例 假设现在正在开发一个音频播放器应用程序,其中...
Q_DECLARE_PUBLIC(MyClass)在MyClassPrivate中声明了一个MyClass* q_ptr;成员。 在实现文件中,通过Q_D(MyClass)宏(这通常是一个宏定义,如#define Q_D(Class) Class##Private * const d = q_func()),我们可以快速访问到q_ptr,进而访问MyClass的公共和受保护成员。 实际应用与好处 使用Q_DECLARE_PRIVATE...
在private 类 MyObjectPrivate 中,通过构造函数将主类 MyObject 的指针传给 q_ptr。然后我们使用类似主类中使用的 Q_DECLARE_PRIVATE 的宏一样的另外的宏 Q_DECLARE_PUBLIC。这个宏所做的就是让你能够通过 Q_Q(Class) 宏使用主类指针。与 D-Pointer 不同,这时候你需要使用的是 Q_Pointer。这两个是完全相...
Q_DECLARE_PUBLIC(MyObject); MyObject::Priority m_priority; }; 在private 类 MyObjectPrivate 中,通过构造函数将主类 MyObject 的指针传给 q_ptr。然后我们使用类似主类中使用的 Q_DECLARE_PRIVATE 的宏一样的另外的宏 Q_DECLARE_PUBLIC。这个宏所做的就是让你能够通过 Q_Q(Class) 宏使用主类指针。与 ...
回到我们前面说明的 Q_DECLARE_PRIVATE 这个宏: #define Q_DECLARE_PRIVATE(Class) \ inline Class##Private* d_func() { return reinterpret_cast(qGetPtrHelper(d_ptr)); } \ inline const Class##Private* d_func() const { return reinterpret_cast(qGetPtrHelper(d_ptr)); } \ ...
1、Q_D具体用法: Q_DECLARE_PRIVATE: MyClass能访问MyClassPrivate类中私有成员变量 Q_DISABLE_COPY: 防止D指针d_ptr二次释放 2、Q_Q具体用法: MyClass mc;mc.fun(); //主类通过d指针先访问私有类私有函数,然后在私有函数通过q指针访问主类公有函数...
Q_D的设置意在方便地获取私有类指针,文件为qglobal.h。下面的##是宏定义的连字符。假设类名是A,那么A##Private翻译过来就是APrivate。 #define Q_D(Class) Class##Private * const d = d_func() d_func()函数如下实现: #define Q_DECLARE_PRIVATE(Class) \ ...
Q_DECLARE_PRIVATE 查看Q_DECLARE_PRIVATE(QObject)的定义: //qglobal.h#define Q_DECLARE_PRIVATE(Class) \inline Class##Private* d_func() \{ Q_CAST_IGNORE_ALIGN(return reinterpret_cast<Class##Private *>(qGetPtrHelper(d_ptr));) } \inline const Class##Private* d_func() const \{ Q_CAST...
Q_DECLARE_PRIVATE(MyClass); }; 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 这里,我们定义了一个指针d_ptr指向私有实现类,然后用Q_DECLARE_PRIVATE宏来定义一些辅助函数和声明友元类: #define Q_DECLARE_PRIVATE(Class) / inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>...
Qt中Q和D指针实现 d指针是在主类中使用的,主类获取私有类或类中私有变量的指针 q指针是在私有数据类中使用的,来获取主类对象指针 Q_DECLARE_PRIVATE宏和Q_D宏配合用来在主类中访问私有类对象 #defineQ_DECLARE_PRIVATE(Class) \ inline Class##Private* d_func() { return reinterpret_cast<Class##Private...