我想在非基于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;
答案 0 :(得分:4)
Q_DISABLE_COPY
,因为已在基类QObject
中禁用了复制构造函数。Q_ENUM
代替Q_ENUMS
。它提供了更多功能,但需要在枚举声明后放置。Q_GADGET
,则可以使用QObject
,但仅适用于没有信号,广告位和Q_INVOKABLE
方法的类