VS2008+Qt4: uic, moc使用小记&两类Link错误的解决方案

关于在VS2008下使用Qt4,之前已有文章记录,该文章还给出了qmake的简单使用。

这里就不再重复了,有必要的话,请点击这个链接跳转到目标内容。

晕~~~外链图片看不了,点这里查看原文。

以下介绍uicmoc的使用。我们以一个对话框例子为依托,依照我自己的工作步骤来讲述。

1、首先,打开Qt Designer (Qt设计师),然后新建一个无按钮的对话框

VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安
 

然后在对话框上放置一个行编辑框(lineEdit)和两个按钮(OK,对象名okButton; Cancel,对象名cancelButton),如下图:

VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安
 

然后保存到自己新建的工程文件夹。

2、打开VC2008,新建Win32空的console工程,添加现有项,也即刚才新建的*.ui窗体资源。当然也可以在VC2008的向导中新建窗体其实都一样,到这一步都是将其添加到工程。

然后对*.ui资源编译(uic即是UI Compiler,用户界面资源编译器)生成头文件。首先在该*.ui文件上右击,选择【属性】:

VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安

  

配置自定义生成步骤如下:

VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安
 

命令行: uic  <[SrcPath]\UiName.ui>  -o  <[DstPath]\uiName.h>

然后执行【编译】:

VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安
 

编译后生成ui_GoToCellDialog.h,如有必要,可打开该文件进行编辑,但若该*.ui被重新编译后,原来的h文件会被覆盖,也即是说,之前的改动也不存在了。

3、然后,我们来写一个新的对话框类,继承自QDialog类和刚才创建的GoToCellDialog类,不妨取名为gtc吧。新建头文件gtc.h编辑必要的代码,另外添加对OK/Cancel按钮的响应,也就是链接信号槽,注意这里用到了Q_OBJECT宏:

VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安
 

然后新建gtc.cpp文件,编写该类的实现代码。

4、最后,新建主文件main.cpp,比较简单,就是:新建App,新建Dialog,更新并显示Dialog,执行App,主函数返回。/* 此部分略去约一万字 */

 

所有代码编写完毕后保存修改,全部编译,不出意外,会出现链接时错误(除非你以另外的方式,比如打开VS2008,按照新建Qt4工程向导方式来工作,又或者,你根本不是在VS2008下而是在QtCreator等环境中工作,那此文也没多大意义了)。

1)其一是在main.obj中类似于以下Link错误:

mian.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall QApplication::~QApplication(void)" (__imp_??1QApplication@@UAE@XZ),该符号在函数 _main 中被引用

问题原因:找不到该函数的定义(或者声明。一般是在lib中声明,在dll中定义)

解决办法:添加QtCore4.libQtGui4.lib输入(设置依赖项或者#pragma

2)其二是关于MetaObject中类似于以下Link错误:

gtc.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall gtc::metaObject(void)const " (?metaObject@gtc@@UBEPBUQMetaObject@@XZ)

问题原因:注意到Q_OBJECT宏,关于Meta Object请查阅相关资料,查阅之后就会明白这个问题。

解决办法:moc. 使用Meta Object Compiler(元对象编译器)对gtc.h编译,生成moc_gtc.cpp

VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安
 

命令行: moc  <[SrcPath]\SrcName.h>  -o  <[DstPath]\mocDst.cpp>

生成moc_gtc.cpp,将其加入到工程。

如此便解决以上两类Link问题。编译,链接,运行结果如下:

VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安
 

 ======================================================================

更多VC,Qt,OpenCV, C/C++,MFC,数据结构/算法,计算机网络等相关问题,欢迎讨论。

本文原创,作者 云山飘渺@海客长安

出处 http://fengyhack.blog.163.com/blog/static/2365830752014101753937958/

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值