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工程。



上一篇:Modscan32 软件最全使用详解

下一篇:Qt 解决QTableView修改合并单元格内容无法修改到合并范围内的单元格


Qt
Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图