簡體   English   中英

在非QT類中使用Q_ENUMS

[英]Using Q_ENUMS in non-QT classes

我正在嘗試在基於非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. 您不需要Q_DISABLE_COPY因為在基類QObject中已經禁用了復制構造函數。
  2. 您可以在Qt 5.5及更高版本中使用Q_ENUM而不是Q_ENUMS 它提供了更多功能,但需要放在枚舉聲明之后。
  3. 如果您不想對QObject ,則可以使用Q_GADGET ,但僅適用於沒有信號,插槽和Q_INVOKABLE方法的類

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM