gpt4 book ai didi

c++ - 如何使用 qRegisterMetaType 而不是 Q_ENUM?

转载 作者:行者123 更新时间:2023-11-28 04:15:08 25 4
gpt4 key购买 nike

这是我的包含 Q_ENUM 的类。我需要使用 Q_ENUM 因为我使用 QVariant。原因是在我的应用程序中,有一个部分我们调用 qRegisterMetaType,如果可能的话,我们希望仅在 1 个位置注册元类型。

是否可以使用 qRegisterMetaType 而不是 Q_ENUM?有性能原因吗?

class MyEnums : public QObject
{
public:
enum class SettingType
{
Integer,
String,
Boolean,
Float,
Double,
Enum,
};

Q_ENUM(SettingType)
};

最佳答案

  1. 您不需要调用qRegisterMetaType() 来使用带有QVariant 的类型。通常,您只需要 Q_DECLARE_METATYPE()
  2. 如果类型将用于排队的信号/槽连接,或与 QObject::property API 一起使用,您只需要调用 qRegisterMetaType()。请注意,对于枚举类型,在这些情况下您甚至不需要调用 qRegisterMetaType()
  3. 要调用qRegisterMetaType(),您仍然需要使用Q_DECLARE_METATYPE()。因此,使用 qRegisterMetaType(),您只需将 Q_ENUM() 换成 Q_DECLARE_METATYPE()
  4. 使用 Q_ENUM() 允许您在运行时检索枚举值的名称:

    qDebug() << MyEnums::Integer // Will print "MyEnums::Integer" if using Q_ENUM()
    // Will print "0" if using Q_DECLARE_METATYPE()

关于c++ - 如何使用 qRegisterMetaType 而不是 Q_ENUM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56829589/

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