【问题标题】:Qt, enums and metaobject compilerQt、枚举和元对象编译器
【发布时间】:2013-11-16 18:49:10
【问题描述】:

我有以下用户类:

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
    };
};

编译这段代码时出现以下错误:undefined reference to "Base::staticMetaObject"

需要做什么?

【问题讨论】:

  • 你的意思是Q_ENUMS(LineState)
  • Base的声明在哪里?请注意,与 Q_ENUMS 一起使用的枚举必须在 QObject 子类中声明。
  • 我试过了,但对我没有帮助。在编写的文档中:Use Q_GADGET instead of Q_OBJECT to enable the meta object system's support for enums in a class that is not a QObject subclassqt-project.org/doc/qt-5.0/qtcore/qobject.html
  • 对不起,我把类名弄错了(为了清楚起见,我只是在发布代码时重命名了一些变量):(

标签: c++ qt enums qgadget


【解决方案1】:

您不需要在MyLine 类中首先使用Q_ENUMS(Base::LineState),而是在Base 类中生成此元数据。

您还必须将带有 Base 类的头文件添加到 pro 文件中的 HEADERS 列表中,以便 moc 工具可以为元数据生成代码。

【讨论】:

  • You don't need first Q_ENUMS(Base::LineState) in MyLine class, you are generating this meta data in Base class - 这是天才,而且有效!我删除了这部分代码,现在一切正常。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 2023-03-10
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
相关资源
最近更新 更多