【发布时间】:2015-12-08 23:28:21
【问题描述】:
看起来 Qt 没有正确处理 Q_GADGET 宏,因为我收到以下错误。有人知道为什么吗?
错误: 对 `Exception::staticMetaObject' 的未定义引用
编辑: 后来我发现 MOC 不生成 moc_exception.cpp。有时当我切换编译器工具包时,它编译得很好,但是如果我添加另一个继承异常的类,它再次不起作用。问题应该出在 MOC 的某个地方,在某些情况下会忽略 Q_GADGET 宏?
我有 Qt 5.5.0。
project.pro
CONFIG += c++11
QT += core
QT -= gui
SOURCES += \
main.cpp
HEADERS += \
nobject.h \
exception.h
nobject.h
#ifndef NOBJECT_H
#define NOBJECT_H
#include <QObject>
class NObject
{
Q_GADGET
public:
NObject() {}
virtual ~NObject() {}
};
#endif // NOBJECT_H
exception.h
#ifndef EXCEPTION_H
#define EXCEPTION_H
#include "nobject.h"
class Exception : public NObject
{
Q_GADGET
public:
Exception() {}
virtual ~Exception() {}
};
#endif // EXCEPTION_H
main.cpp
#include <iostream>
#include "exception.h"
using namespace std;
int main(int argc, char* argv[]) {
Exception nobject;
std::cout << Exception::staticMetaObject.className() << std::endl;
return 0;
}
【问题讨论】: