I'm hoping somebody can give me a summary of what the Q_OBJECT macro really is.

* Is it a C++ macro in the traditional sense. If so, where is it defined, and what exactly does the preprocessor do when it comes accross Q_OBJECT

* Apparently qmake recognizes the Q_OBJECT macro in project source files. So does qmake actually parse the C++ code and identify all the signals and slots in the source code for the class in which Q_OBJECT is included? This would be surprising to me since it would require parsing of C++ syntax.

* What are "signal:" and "slot:"... apparently they are not macros. Does the compiler recognize these things, or does qmake do a trick and modify all the sources so that the compiler doesn't even see these words?