它看起来像Qt没有正确处理Q_GADGET宏,因为我得到下面的错误。有人知道为什么未定义的引用staticMetaObject
错误:未定义的参考`异常:: staticMetaObject”
编辑:后来我发现,商务部不会产生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;
}
这是一个经常抓住我。默认情况下,qmake在项目文件过期时添加一条规则来生成Makefile。但是当你将MOC的一个宏添加到'$ HEADERS'中的一个文件时,它不知道它需要更新。你应该可以'make -B Makefile'来强制它。 –