Using any c++ function as a Qt slot

后端 未结 5 1108
太阳男子
太阳男子 2021-01-17 11:54

Is there a way to use any C++ function as a Qt slot, without having its class inheriting from QWidget?

5条回答
  •  情话喂你
    2021-01-17 12:35

    You cannot in Qt versions < Qt 5.

    In order to use signals/slots the meta object compiler has to be invoked. To make this happen your class should meet the following requirements:

    • Inherit from QObject or any other subclass (eg QWidget, QPushButton etc)
    • The Q_OBJECT macro should be defined in the private section of the class in order to enable meta-object features such as slots
    • Use the Qt keywords slots and signals in order to declare which functions should be handles by the meta compiler as slots or signals

    For more details check the corresponding documentation pages about the meta-object system and the signals & slots

    Also check the QObject documentation:

    Notice that the Q_OBJECT macro is mandatory for any object that implements signals, slots or properties. You also need to run the Meta Object Compiler on the source file. We strongly recommend the use of this macro in all subclasses of QObject regardless of whether or not they actually use signals, slots and properties, since failure to do so may lead certain functions to exhibit strange behavior.

    Edit: Since Qt 5, functors and lambda expressions can be used as slot. See New Signal Slot Syntax in Qt 5

提交回复
热议问题