【发布时间】:2026-02-11 02:55:01
【问题描述】:
例如我有以下课程:
namespace someName
{
class someClass
{
Q_ENUMS(ESomeEnum)
public:
enum ESomeEnum {ENUM_A, ENUM_B, ENUM_C};
// ... some other things ..
}
}
Q_DECLARE_METATYPE(someName::someClass)
有没有办法使用 QMetaEnum::valueToKey 或 QMetaEnum::keyToValue ?
尝试this answer中的方法却报错:
error: static assertion failed: QMetaEnum::fromType only works with enums declared as Q_ENUM or Q_FLAG #define Q_STATIC_ASSERT_X(Condition, Message) static_assert(bool(Condition), Message)
我可以使用 X-Macros 来获得我想要的输出,但在 Qt 中学习更多技巧也很好。
【问题讨论】:
-
您使用的是
Q_ENUMS,我认为在这种情况下您必须使用Q_ENUM。 -
我正在维护以这种方式编写的代码,将 Q_ENUMS 更改为 Q_ENUM 会向项目经理标记不必要的“恐慌”,因为这会影响很多文件。
-
到目前为止,接受的答案应该不同。 @DrumM 是正确的,因为 Qt 5.8 你可以使用
Q_NAMESPACE+Q_ENUM_NS组合。
标签: c++ qt qmetaobject