逛奔的蜗牛

我不聪明,但我会很努力

   ::  :: 新随笔 ::  ::  :: 管理 ::
From: http://zhgw01.blog.163.com/blog/static/1041481220105253491586/
根据 src/corelib/global.h
 template <typename T>
class QGlobalStatic
{
public:
    T *pointer;
    inline QGlobalStatic(T *p) : pointer(p) { }
    inline ~QGlobalStatic() { pointer = 0; }
};

#define Q_GLOBAL_STATIC(TYPE, NAME)                              \
    static TYPE *NAME()                                          \
    {                                                            \
        static TYPE this_##NAME;                                 \
        static QGlobalStatic<TYPE > global_##NAME(&this_##NAME); \
        return global_##NAME.pointer;                            \
    }

   

上面的展开成
 static  QFontDatabasePrivate *privateDb()
{
    static QFontDatabasePrivate this_privateDb;  // 注意第一次引用的时候会开始进行初始化, 以后不再生成
   static QGLobalStatic<QFontDatabasePrivate> global_privateDb(&this_privateDb); //对上面生成的对象的指针进行包装, 同上,只有第一次才会生成

  return global_privateDb;
}

QFontDatabase的构造函数中会调用createDatabase (里面调用了initializeDb), initializeDb里调用了privateDb(),一个这个时候是第一次调用, 会生成QFontDatabasePrivate对象

QFontDatabasePrivate中的QDataStream *stream成员才是真正处理qte的字体

posted on 2013-06-26 10:02 逛奔的蜗牛 阅读(1550) 评论(0)  编辑 收藏 引用 所属分类: C/C++Qt

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理