援引Qt documentation 中对Q_OBJECT的多处介绍,同时摘自题主在
stackoverflow
上的回答。
1 From Qt documentation of
The Meta-Object System
The moc tool reads a C++ source file. If it finds one or more class declarations that contain the Q_OBJECT macro, it produces another C++ source file which contains the meta-object code for each of those classes. This generated source file is either #include’d into the class’s source file or, more usually, compiled and linked with the class’s implementation.
2 From Qt documentation of
THE Q_OBJECT
The Q_OBJECT macro must appear in the private section of a class definition that declares its own signals and slots or that uses other services provided by Qt’s meta-object system.
3 From Qt documentation of
moc
The moc tool reads a C++ header file. If it finds one or more class declarations that contain the Q_OBJECT macro, it produces a C++ source file containing the meta-object code for those classes. Among other things, meta-object code is required for the signals and slots mechanism, the run-time type information, and the dynamic property system.
4 From Qt documentation of
Signals and Slots
The Q_OBJECT macro is expanded by the preprocessor to declare several member functions that are implemented by the moc; if you get compiler errors along the lines of “undefined reference to vtable for LcdNumber”, you have probably forgotten to run the moc or to include the moc output in the link command.