先说一下环境 Win Vista + VC2008 + Qt 5.2
baseitem.h
#ifndef BASEITEM_H
#define BASEITEM_H
#include <QtCore/QMetaEnum>
#include <QtCore/QDebug>
#include <QtCore/QStringList>
class BaseItem
{
Q_GADGET
Q_ENUMS(MyEnum)
public:
enum MyEnum{AA, BB, CC, DD, EE};
BaseItem();
~BaseItem();
private:
QStringList m_myEnumList;
};
#endif // BASEITEM_H
baseitem.cpp
#include "baseitem.h"
BaseItem::BaseItem()
{
QMetaEnum myEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("MyEnum"));
for (int i=0; i<myEnum.keyCount(); ++i)
{
m_myEnumList << myEnum.key(i);
}
qDebug()<<m_myEnumList;
}
BaseItem::~BaseItem()
{
}
单独编译文件没问题
连接时候出错:
1>baseitem.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const BaseItem::staticMetaObject" (?staticMetaObject@BaseItem@@2UQMetaObject@@B)
1>D:\Projects\test\Debug\metatest.exe : fatal error LNK1120: 1 unresolved externals
仔细看了一下,Q_GADGET只是声明了一个静态QMetaObject,不知道是怎么初始化的,dbzhang800能给讲讲吗?我的问题出在哪里?
另外,为了生成moc_baseitem.cpp,特别对baseitem.h文件的属性作了设置,调用moc编译,实际上没有生成moc_baseitem.cpp
不知道是不是还有什么地方我没有注意到?
另一个奇怪的事情是,我重新创建了一个QObject的子类,头文件baseitem.h,然后手动把QObject的继承关系删除,并用Q_GADGET替代了Q_OBJECT宏,结果baseitem.h的属性不知什么原因也自动被清空了,根本没有了生成moc_xxxx.cpp的相关设置了,所以才有了上面我手工设置的想法,但是依然不成功
[ 此帖被sbtree在2010-07-31 00:15重新编辑 ]