GADGET意味着这个类不一定需要继承QObject类了
适用于不继承QObject但仍希望使用QMetaObject提供的一些反射功能的类。就像Q_OBJECT宏一样,它必须出现在类定义的私有部分中。
Q_GADGET可以有Q_ENUM、Q_PROPERTY和Q_INVOKABLE,但不能有信号或插槽。
Q_GADGET使类成员staticMetaObject可用。staticMetaObject的类型为QMetaObject,并提供对用Q_ENUM声明的枚举的访问。
如以下代码:
class TSG_Device : public TSG_Caller {
/// <summary>
/// 设备状态
/// </summary>
public:
enum class DeviceState
{
DS_None,
DS_Unknown,
DS_Disconnected,
DS_Connected,
DS_Working,
DS_Pause,
DS_Stop
}; Q_ENUM(DeviceState)
enum class DeviceOpen {
DO_Open,
DO_Close
}; Q_ENUM(DeviceOpen)
}
这样一个内嵌的枚举类,也可以用QMetaEnum做到之前我们想要做的事