gpt4 book ai didi

c++ - 在非 QT 类中使用 Q_ENUMS

转载 作者:行者123 更新时间:2023-11-30 01:44:18 25 4
gpt4 key购买 nike

我打算在非基于 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方法的类

关于c++ - 在非 QT 类中使用 Q_ENUMS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36465005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com