Qt应用Q/D指针
本文主要介绍如何使用Qt的Q指针和D指针,并开发一个可拖拽的QWidget作为示例
由来:
我们在Qt源码中经常可以看到Q_D/Q_Q这样的宏,这两个宏的作用是什么呢,主要有两方面用途:
- 信息隐藏:把类头文件中的私有数据成员和方法隐藏起来,只暴露用户需要的接口
- 二进制兼容:如果程序从一个以前版本的库动态链接到新版本的库之后,能够继续正常运行,而不需要重新编译,那么我们就说这个库是二进制兼容的。
应用:
我们来实际编写一个可拖拽的QWidget
1. 首先定义两个宏:
这两个宏建立了公有类和私有类的友元关系,并且创建了两个指向对方的指针以及两个访问方法
#define CI_DECLARE_PRIVATE(Class) \
Q_DECLARE_PRIVATE(Class) \
QScopedPointer<Class##Private> d_ptr;
#define CI_DECLARE_PUBLIC(Class) \
Q_DECLARE_PUBLIC(Class) \
Class* q_ptr;
<QtCore/qglobal.h>提供了Q_D和Q_Q的定义,提供了公有类和私有类互相访问的方法:
#define Q_D(Class) Class##Private * const d = d_func()
#define Q_Q(Class) Class * const q = q_func()
</