• 7533阅读
  • 2回复

qmdiarea.cpp源码中的q是什么? [复制链接]

上一主题 下一主题
离线bingcaihuang
 

只看楼主 倒序阅读 楼主  发表于: 2011-01-30
如题:
void QMdiAreaPrivate::_q_processWindowStateChanged(Qt::WindowStates oldState,
                                                   Qt::WindowStates newState)
{
    if (ignoreWindowStateChange)
        return;


    Q_Q(QMdiArea);
    QMdiSubWindow *child = qobject_cast<QMdiSubWindow *>(q->sender());
    if (!child)
        return;
…………………………
}
请问红色的q是什么?
离线wd007

只看该作者 1楼 发表于: 2011-01-30
不会没有定义的,搜索一下就知道了。
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线novesky

只看该作者 2楼 发表于: 2011-01-30
大概在qobject.h之类的文件中,具体忘了。贴上关键的几行代码:
  1. template <typename T> static inline T *qGetPtrHelper(T *ptr) { return ptr; }
  2. #define Q_DECLARE_PRIVATE(Class) \
  3.     inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(qGetPtrHelper(d_ptr)); } \
  4.     inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(qGetPtrHelper(d_ptr)); } \
  5.     friend class Class##Private;
  6. #define Q_DECLARE_PRIVATE_D(Dptr, Class) \
  7.     inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(Dptr); } \
  8.     inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(Dptr); } \
  9.     friend class Class##Private;
  10. #define Q_DECLARE_PUBLIC(Class)                                    \
  11.     inline Class* q_func() { return static_cast<Class *>(q_ptr); } \
  12.     inline const Class* q_func() const { return static_cast<const Class *>(q_ptr); } \
  13.     friend class Class;
  14. #define Q_D(Class) Class##Private * const d = d_func()
  15. #define Q_Q(Class) Class * const q = q_func()


可以看到q是指向该类(Class)的一个指针, d_ptr是指向该类私有数据类(ClassPrivate)的指针。有很多宏,但是很巧妙。建议你看看源代码,还有inside qt系列的文章http://blog.csdn.net/qkevin123/archive/2009/02/13/3887374.aspx
快速回复
限100 字节
 
上一个 下一个