QT中的Q_D指针与Q_Q指针
Q_D指针主要是为了二进制兼容问题。
一、Q_D指针
主类获取其私有类的指针。
Q_D宏的定义是这样的:
这里可以看到,使用Q_D宏之后使用的d,其实是私有类的指针。再来看看d_func()
。
整个d_func()
的作用就是获取这个这个类里面的d_ptr
。
每个类都会在头文件中添加这个宏,这样使用d_func()
的时候就会返回自己的私有类的指针。
那这个d_ptr是在哪里定义的呢?是在qobject
类里面。
这个QScopedPointer
是qt中的智能指针。
总结一下,d_func()
就是获取这个类私有类的指针,主要作用是二进制兼容用。
二、Q_Q指针
私有类获取其主类指针。
Q_Q宏的定义是这个。
而q_func()
是在这个宏里面定义的:
这个宏通常是在类的私有类中使用。
看q_func()
的具体实现,是获取普通类的指针,结合这个宏在私有类中的定义,那么Q_Q指针的用法就了然了,就是私有类获取普通类指针。
那么这个q_ptr
是在哪里定义的呢?
QObjectPrivate
继承了QObjectData
,这个q_ptr
就是在这里定义的。
总结一下,Q_Q
指针是私有类获取主类指针用的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2021-06-28 QT -- float转ushort,用QImage 显示32float格式图像(CV_32FC1)