首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QMetaEnum将枚举转换为字符串

使用QMetaEnum将枚举转换为字符串
EN

Stack Overflow用户
提问于 2021-06-11 09:49:12
回答 3查看 218关注 0票数 0

我已经搜索了很多这个话题,并且已经找到了一些方法,但是我发现了一些错误,我找不到原因。

想法是用QMetaEnum读取枚举中的键,以便稍后在组合框中填充字符串。

我已经有了枚举,并且在枚举所在的类中设置了Q_Object和Q_Enum宏。但是,通过使用metaObject,我得到了“对'Planet::metaObject() const‘的未定义引用”错误消息。

这是行星。

代码语言:javascript
复制
#include <QMetaEnum>
class Planet
{
    Q_OBJECT
public:    
    enum PlanetTypes
    {
       Barren,Gas,Ice,Lava,Oceanic,Plasma,Storm,Temperate
    };Q_ENUM(PlanetTypes)
    Planet();
    //some getters and setters for my private member-variables
};

下面是我试图读取枚举并获取错误消息的片段。

代码语言:javascript
复制
QStringList DataModel::getPlanetTypes()
{
   QStringList PlanetTypesList;

   Planet p;
   const QMetaObject* metaObj = p.metaObject();
   QMetaEnum e = metaObj->enumerator(metaObj->indexOfEnumerator("PlanetTypes"));
   for(int i=0; i<e.keyCount();i++)
   {
        PlanetTypesList.append(e.key(i));
   }
   return PlanetTypesList;

}

错误指的是行:

代码语言:javascript
复制
QMetaEnum e = metaObj->enumerator(metaObj->indexOfEnumerator("PlanetTypes"));

我甚至试图继承QObject的星球,但它也没有解决这个问题。

如果能得到一些帮助,或者进一步解释一下QMetaEnum的用法,那就太酷了。

编辑:它也给了我一个错误,说:未定义的引用‘’,如果这有助于了解这个问题的来源。

Edit2:我已经找到了这个“vtable”问题,但是它也不能解决这个错误。Qt undefined reference to vtable

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-06-12 07:46:44

我找到了我问题的答案。

当我研究这个vtable问题时,我找到了这篇文章。C++ - Undefined reference to `vtable

我试了一试,把Q_Object宏从类中删除了。然后两个错误都消失了

编辑:这解决不了它!但是您可以在这里找到解决方案:QMetaEnum does not read keys from enum,当我发布第二篇文章时,我并不知道这两个问题是相互关联的。

票数 0
EN

Stack Overflow用户

发布于 2021-06-11 10:53:04

包括QMetaEnum和从QObject派生的内容通常都很有用:

代码语言:javascript
复制
#include <QMetaEnum>
class Planet : public QObject
    {
        Q_OBJECT
    public: 

其他一切看起来都很好(乍一看)。

票数 0
EN

Stack Overflow用户

发布于 2021-06-12 18:55:48

对此只有两种可能的解释:

  1. moc实用程序不会被调用来处理包含Planet的头文件,不管是什么原因(错误的时间戳阻止了第二次执行它,并且有旧版本的moc_planet.h,文件没有添加到项目中,也不在makefile规则中,还有标头的重复)

  1. 编译器优化了Planet类的空vtable .在这种情况下,任何没有内联声明的虚拟函数,例如~Planet();,在.cpp中定义了主体,都可以。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67934821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档