From: http://zhgw01.blog.163.com/blog/static/1041481220105253491586/根據(jù) 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; // 注意第一次引用的時(shí)候會(huì)開始進(jìn)行初始化, 以后不再生成 static QGLobalStatic<QFontDatabasePrivate> global_privateDb(&this_privateDb); //對(duì)上面生成的對(duì)象的指針進(jìn)行包裝, 同上,只有第一次才會(huì)生成
return global_privateDb; }
|
QFontDatabase的構(gòu)造函數(shù)中會(huì)調(diào)用createDatabase (里面調(diào)用了initializeDb), initializeDb里調(diào)用了privateDb(),一個(gè)這個(gè)時(shí)候是第一次調(diào)用, 會(huì)生成QFontDatabasePrivate對(duì)象
QFontDatabasePrivate中的QDataStream *stream成員才是真正處理qte的字體