Qt编程学习笔记.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

Qt编程学习笔记

Qt界⾯开始了~设计阶段解决~关注3d物体控制~arcball功能。

1.Qt与VS2008使⽤配置:

2.Qmake使⽤:

3.errorLNK2001:⽆法解析的外部符号Qt的moc机制

先转⼀下其他⼈的帖,同样是errorLNK2001的问题。

第⼀次来发个帖,如果可能的话期望找到根本原因!

⼏天没有关注我的QT程序,再次拿出来编译后竟然出现连接错误,因为四体不勤,没有频繁的checki,所以⽆法找到中间版本,只能解决

问题了。

1MainWindowBottomWidget.obj:errorLNK2001:⽆法解析的外部符号public:virtualstructQMetaObjectconst*__thiscall

MainWindowBottomWidget::metaObject(void)const()

1MainWindowBottomWidget.obj:errorLNK2001:⽆法解析的外部符号public:virtualvoid*__thiscall

MainWindowBottomWidget::qt_metacast

(charconst*)()

1MainWindowBottomWidget.obj:errorLNK2001:⽆法解析的外部符号public:virtualint__thiscall

MainWindowBottomWidget::qt_metacall(enum

QMetaObject::Call,int,void**)()

问题原因:没有找到根本原因,据说是链接时⽆法找到对应的moc⽂件。

VS2008问题解决⽅法:在对应的cpp⽂件的末尾加上#includemoc_MainWindowBottomWidget.cpp(⽂件名根据实际情况修改)

原因:

1.是否加上了Q_OBJECT宏?

2.你的widget⾥⽤到signalslot了吧?(也许是后续加的)

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

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

如果⽤到信号槽但类的定义没有放在.h⽂件中,qmake不会⾃动调moc,你就需要写#includemoc_MainWindowBottomWidget.cpp告诉

qmake你有⽂件需要

moc

在visualstudio中,如果是接下来添加的Q_OBJECT宏、信号函数、槽函数等,由于之前编译过程中没有⽣成moc⽂件,或者该moc⽂件已

被删除,那么新添加

后,visualstudio就不会再⽣成moc⽂件了,这就导致visualstudio在链接时出现以上情况的Error。

我总结的原因如下:

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

利⽤Qt编程时,写好.h、.cpp⽂件并第⼀次编译之后,若.h⽂件中定义类时没有添加Q_OBJECT宏以及信号函数、槽函数,VS编译命令中

就没有moc命令,就不会调⽤Qt的moc⼯具以⽣成moc_*.cpp⽂件;并且即使添加了Q_OBJECT宏之后,VS也不会⾃动添加moc命令,因⽽

不会⽣成moc⽂件。

VS在LINK时,找不到moc⽂件,就出现了errorLNK2001的错误。

修改⽅法:

如果在.cpp⽂件的末尾添加#includemoc_MainWindowBottomWidget.cpp,确实可以解决errorLNK2001的问题。但是,总有⼀种让⼈很

不爽的感觉。我⽤以下的⽅法解决了这个问题:

1.复制⼀份.h、.cpp⽂件并备份起来;

2.在vs⼯区中移除并删除对应⽂件;

3.新建两个空⽩⽂件,命名为*.h、*.cpp,再重新加载这两个⽂件⾄⼯程中;

4.将备份中的.h、.cpp⽂件中的内容复制到新添加的*.h、*.cpp⽂件⾥;

5.重新编译。

文档评论(0)

洞察 + 关注
官方认证
文档贡献者

博士生

认证主体宁夏三科果农牧科技有限公司
IP属地宁夏
统一社会信用代码/组织机构代码
91640500MABW4P8P13

1亿VIP精品文档

相关文档