它看起來像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'來強制它。 –