简介
通过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和*.cpp文件进行生成工程是qmake。构建项目、重新构建项目都不会重新qmake工程。
标签:类型转换,const,struct,LNK2001,public,Qt From: https://www.cnblogs.com/ybqjymy/p/18021768