When MotionBuilder starts, QtSample DLL is loaded, but no QtSample instance is created. Only when a plugin is run, the QtSample, FBWidgeHolder and xxx instance are created like the below sequence:
Let’s see the track to the code to see details:
Until now the UI has been created and shown in screen. But how to respond to the button click event?
Do you feel strange about xxx::qt_metacall(…)? You haven't created it. Actually it is created when compiler creates moc_xxx.cpp files by MOC commands. Below graphic show you which file could generate which file by which command:
Each file’s responsibilities have been shown in below graphic:
You can find the use of UIC in xxx.ui file's property:
You can find the use of MOC in xxx.h file's property:
You may get confused that you cannot find the DllMain(…) method, the DLL entry point. Actually it is generated by below MICRO in qtsample_tool.cpp file.
// Library declaration. FBLibraryDeclare( qtsample ) { FBLibraryRegister( QtSample ); } FBLibraryDeclareEnd;
After compiling the qtsample_tool.i file you can see it clearly:
static FBLibrary qtsampleGlobalFBLibrary; extern "C" { __declspec(dllexport) bool LIBRARY_INIT(HIError ) { ; if (qtsampleGlobalFBLibrary.LibInit()) return true; return false; } } __declspec(dllexport) void EntryPointqtsample(kFBDllOperation Operation); BOOL __stdcall DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved ) { switch (fdwReason) { case 1: EntryPointqtsample(kFBDllLoad); break; case 0: EntryPointqtsample(kFBDllUnLoad); break; } return 1; } void EntryPointqtsample(kFBDllOperation Operation) { switch( Operation ) { case kFBDllLoad: { { extern void FBModuleQtSample( ); FBModuleQtSample( );; } } break; default: break; } };