天天看点

QT无法解析的外部符号"public:virtualstructQMetaObjectconst*__thiscallWidget::metaObject"

查找原因:

1. 是否加上了Q_OBJECT宏?

2. 你的widget里用到signal slot了吧?(也许是后续加的)

3. 类定义在cpp里了? 没有相应的.h文件?

4. 如果以前没信号槽新加的, 那么makefile需要重新生成。

总结原因如下:

vs在编译时会产生一系列的命令以控制该.h、.cpp文件的编译过程,并且,以后不会自动修改这些命令。

利用Qt编程时,写好.h、.cpp文件并第一次编译之后,若.h文件中定义类时没有添加Q_OBJECT宏以及信号函数、槽函数,VS编译命令中就没有moc命令,就不会调用Qt的moc工具以生成moc_*.cpp文件;并且即使添加了Q_OBJECT宏之后,VS也不会自动添加moc命令,因而不会生成moc文件。

VS在LINK时,找不到moc文件,就出现了error LNK2001的错误。

解决方法:

1.如果没有使用到信号和槽,可以去掉Q_OBJECT宏;

2.如果要用到信号和槽,添加了Q_OBJECT,要重新make一下项目,即可