QT无法解析的外部符号 "public: virtual struct QMetaObject const TPickThread::metaObject(void)const " (?metaObject@TPickThread@@UEBAPEBUQMetaObject@@XZ)

相关资料:

https://blog.csdn.net/ganggegel/article/details/79174307   

问题现象:
在写的QT程序中增加了一个线程类,并在类中写了一个信号,增加了Q_OBJECT宏,但是在编译时提示"public: virtual struct QMetaObject const TPickThread::metaObject(void)const " (?metaObject@TPickThread@@UEBAPEBUQMetaObject@@XZ)

查找原因:
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一下项目,即可

posted on 2021-06-09 11:15  疯狂delphi  阅读(1009)  评论(0编辑  收藏  举报

导航