QT构建报错:
D:\code\QGraphicsScaleTest\main.cpp:-1: error: undefined reference to `vtable for ResizableSvgView'
VS编译报错:
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl ResizableSvgView::metaObject(void)const " (?metaObject@ResizableSvgView@@UEBAPEBUQMetaObject@@XZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __cdecl ResizableSvgView::qt_metacast(char const *)" (?qt_metacast@ResizableSvgView@@UEAAPEAXPEBD@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl ResizableSvgView::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@ResizableSvgView@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)
1>debug\\QGraphicsScaleTest.exe : fatal error LNK1120: 3 个无法解析的外部命令
根本原因是在使用 Q_OBJECT 宏时,Qt 的元对象系统会生成一些额外的代码(例如信号、槽和动态属性的支持)。这个过程要求 Qt 在编译时生成和链接一些特定的符号,比如虚表 (vtable) 和其他元对象信息。如果没有正确执行 Qt 的元对象编译步骤,就会看到 undefined reference to ‘vtable for ResizableSvgView’ 这样的错误。
每当使用 Q_OBJECT 宏时,Qt 的 Meta-Object Compiler (MOC) 需要自动生成一个 .moc 文件,在我这个错误中,我发现没有生成moc文件,后面发现是我没有在pro文件中加入自己写的类文件,在使用Q_OBJECT宏的类中,一定要分开写头文件和cpp文件,并且加入到pro文件中,不然编译会报错
SOURCES += \
resizablesvgview.cpp \
HEADERS += \
resizablesvgview.h \