Qt类定义中宏Q_OBJECT的作用

  • Post author:
  • Post category:其他


援引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.