Qt error: LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const *
简介
??通过Qt Creator开发一个动态库,最开始希望只是一个简单的纯C++的动态库,就没有继承QObject,也没有写Q_OBJECT宏。编译时就会报:LNK2001: 无法解析的外部符号public: virtual struct QMetaObject const。绕了不少弯子,终于解决了,把原因分析进行个整理。
面试有个问题:Qt信号槽机制如何才能连接成功?
??这个问题是问的Qt信号槽机制的原理,答案是:public继承QObject,加Q_OBJECT宏。再进一步的回答就是:
“这个宏的作用是,告诉Qt的MOC编译器,需要生成metaobject相关信息,主要是一些成员函数,其中有一条是与类型转换相关,作用就是保证类型转换安全,防止强制指针类型转换时类型不匹配导致的错误。”
解决方案
??把这个错基本就是用到了Qt的特性,却没有MOC编译生成moc文件。需要:
- public继承QObjec
 - 加Q_OBJECT宏
 - 重新构建工程,如果是QtCreator ,右击工程文件夹,重新qmake,参考下图:
 
总结
??主要是对Qt不熟,Creator中构建项目是编译+链接,重新根据*.h和*pp文件进行生成工程是qmake。构建项目、重新构建项目都不会重新qmake工程。
下一篇:Qt 解决QTableView修改合并单元格内容无法修改到合并范围内的单元格
Qt
spc文件怎么看,spc文件用什么打开?
0文件怎么看,0文件用什么打开?
sparseimage文件怎么看,sparseimage文件用什么打开?
sp文件怎么看,sp文件用什么打开?
dv文件怎么看,dv文件用什么打开?
soundpack文件怎么看,soundpack文件用什么打开?
dus文件怎么看,dus文件用什么打开?
dtw文件怎么看,dtw文件用什么打开?
spdf文件怎么看,spdf文件用什么打开?
0文件怎么看,0文件用什么打开?
 
  
  