我正在尝试在基于非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的类(class)中使用Q_ENUMS

编辑:
我只是从中创建一个对象:
SignalSpec *s=new SignalSpec();
s->setModulation(ui->modulationCombo->currentData().value<SignalSpec::Modulations>());

我也有一个此类的QVector:
QHash<QString,QVector<SignalSpec> > signalConfig;

最佳答案

  • 您不需要Q_DISABLE_COPY,因为在基类QObject中已经禁用了复制构造函数。
  • 您可以在Qt 5.5及更高版本中使用Q_ENUM代替Q_ENUMS。它提供了更多功能,但需要放在枚举声明之后。
  • 如果不想对Q_GADGET进行细分,则可以使用QObject,但仅适用于没有信号,插槽和Q_INVOKABLE方法的类
  • 关于c++ - 在非QT类中使用Q_ENUMS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36465005/

    10-09 19:22