关于在VS2008下使用Qt4,之前已有文章记录,该文章还给出了qmake的简单使用。
这里就不再重复了,有必要的话,请点击这个链接跳转到目标内容。
晕~~~外链图片看不了,点这里查看原文。
以下介绍uic与moc的使用。我们以一个对话框例子为依托,依照我自己的工作步骤来讲述。
1、首先,打开Qt Designer (Qt设计师),然后新建一个无按钮的对话框
![VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安 VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安](http://img9.ph.126.net/Q5ZUwEcdjPQr84ukEm5amw==/1561623170808244529.jpg)
然后在对话框上放置一个行编辑框(lineEdit)和两个按钮(OK,对象名okButton; Cancel,对象名cancelButton),如下图:
![VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安 VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安](http://img8.ph.126.net/x6uQN4kd2JuRyB4Z7jCrzA==/1649443363541561128.jpg)
然后保存到自己新建的工程文件夹。
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 - 云山飘渺@海客长安](http://img9.ph.126.net/YjdFFJTnM2sco4jfwDUjtg==/668503069705339549.jpg)
配置自定义生成步骤如下:
![VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安 VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安](http://img9.ph.126.net/_gzLmDKiLIR1mK5oq5pSIw==/3088061969510131359.jpg)
命令行: uic <[SrcPath]\UiName.ui> -o <[DstPath]\uiName.h>
然后执行【编译】:
![VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安 VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安](http://img7.ph.126.net/3TeGaJG216Nk_gT9ipOUNA==/2797579793544719347.jpg)
编译后生成ui_GoToCellDialog.h,如有必要,可打开该文件进行编辑,但若该*.ui被重新编译后,原来的h文件会被覆盖,也即是说,之前的改动也不存在了。
3、然后,我们来写一个新的对话框类,继承自QDialog类和刚才创建的GoToCellDialog类,不妨取名为gtc吧。新建头文件gtc.h编辑必要的代码,另外添加对OK/Cancel按钮的响应,也就是链接信号槽,注意这里用到了Q_OBJECT宏:
![VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安 VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安](http://img1.ph.126.net/2o4C58IhRdKSPZLZ3fSkJw==/1572600694899785461.jpg)
然后新建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.lib和QtGui4.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 - 云山飘渺@海客长安 VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安](http://img4.ph.126.net/oBTcThXRmjc43j3jDvPd_g==/1082271285469813734.jpg)
命令行: moc <[SrcPath]\SrcName.h> -o <[DstPath]\mocDst.cpp>
生成moc_gtc.cpp后,将其加入到工程。
如此便解决以上两类Link问题。编译,链接,运行结果如下:
![VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安 VS2008+Qt4: uic, moc使用小记两类Link错误的解决方案 - von.Ryan.Hack - 云山飘渺@海客长安](http://img2.ph.126.net/YAxpgMgjqRhMZqPFYUurtA==/2697937651789168362.jpg)
======================================================================
更多VC,Qt,OpenCV, C/C++,MFC,数据结构/算法,计算机网络等相关问题,欢迎讨论。
本文原创,作者 云山飘渺@海客长安.
出处 http://fengyhack.blog.163.com/blog/static/2365830752014101753937958/