C++ Qt、枚举和元对象编译器
我有以下用户类:C++ Qt、枚举和元对象编译器,c++,qt,enums,qgadget,C++,Qt,Enums,Qgadget,我有以下用户类: class MyLine : public QLineEdit { Q_OBJECT Q_ENUMS(Base::LineState) public: explicit MyLine (QWidget *parent = 0); }; 我还有一个包含所有全局枚举的基类: class Base { Q_GADGET Q_ENUMS(LineState) public: // The states for MyLine
class MyLine : public QLineEdit
{
Q_OBJECT
Q_ENUMS(Base::LineState)
public:
explicit MyLine (QWidget *parent = 0);
};
我还有一个包含所有全局枚举的基类:
class Base
{
Q_GADGET
Q_ENUMS(LineState)
public:
// The states for MyLine
enum LineState
{
Empty, Correct, Wrong
};
};
当我编译这段代码时,我遇到了以下错误:未定义对“Base::staticMetaObject”的引用。
需要做什么?您不需要首先
Q_enum(Base::LineState)
在MyLine
类中,您正在Base
类中生成此元数据
您还必须将带有
Base
类的头文件添加到pro文件中的头文件列表中,以便moc工具可以为元数据生成代码。您的意思是Q_ENUMS(LineState)
?Base的声明在哪里?请注意,与Q_enum一起使用的enum必须在QObject子类中声明。我尝试过,但没有帮助。在编写的文档中:使用Q_GADGET而不是Q_OBJECT来启用元对象系统对非QObject子类的类中的枚举的支持
。抱歉,我弄错了类的名称(我在发布代码以保持清晰性时刚刚重命名了一些变量):(您不需要MyLine类中的第一个Q_枚举(Base::LineState),您正在基类中生成此元数据
-这是genius,它工作了!我删除了这部分代码,所有代码都工作了。谢谢您的帮助!