Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt、枚举和元对象编译器_C++_Qt_Enums_Qgadget - Fatal编程技术网

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,它工作了!我删除了这部分代码,所有代码都工作了。谢谢您的帮助!