在非QT类中使用Q_ENUMS

时间:2016-04-07 01:14:07

标签: c++ qt qt5

我想在非基于QT的课程中使用Q_ENUMS

#include <QMetaType>
#include <QObject>

class SignalSpec: public QObject
{
    Q_ENUMS(Modulations)
public:
    enum Modulations { PSK , QAM , FSK, PAM };

    SignalSpec();

private:
    Q_DISABLE_COPY(SignalSpec)
};

Q_DECLARE_METATYPE(SignalSpec::Modulations);

但我在编译Q_DISABLE_COPY(SignalSpec)行时遇到此错误:

error: 'SignalSpec::SignalSpec(const SignalSpec&)' is private
     Q_DISABLE_COPY(SignalSpec)
                    ^

有什么问题?
如何在非基于QT的课程中使用Q_ENUMS

修改
我只是从中创建一个对象:

SignalSpec *s=new SignalSpec();
s->setModulation(ui->modulationCombo->currentData().value<SignalSpec::Modulations>());

我也有这个级别的QVector:

QHash<QString,QVector<SignalSpec> > signalConfig;

1 个答案:

答案 0 :(得分:4)

  1. 您不需要Q_DISABLE_COPY,因为已在基类QObject中禁用了复制构造函数。
  2. 您可以在Qt 5.5及更高版本中使用Q_ENUM代替Q_ENUMS。它提供了更多功能,但需要在枚举声明后放置。
  3. 如果您不想使用Q_GADGET,则可以使用QObject,但仅适用于没有信号,广告位和Q_INVOKABLE方法的类