最近在已经发布的dll工程中发现了一个bug,最后决定使用Qt的signal-slot机制去改善。但是原始dll工程并非Qt工程,只是一个MFC工程,直接使用Qt函数是会报错的。经过我的摸索,最终成功移植,使其兼容Qt的函数库。
步骤如下:
1.在目标工程下,依次选择“项目--》**属性--》配置属性--》C/C++--》常规--》附加包含目录”中添加Qt的重要目录,如下图所示
注:这里用的是绝对路径,相对路径好像不行。
2.依次选择“项目--》**属性--》配置属性--》连接器--》常规--》附加库目录”添加lib所在目录,如下图所示:
3.依次选择“项目--》**属性--》配置属性--》连接器--》输入--》附加库目录”中添加qtmain.lib、QtCore4.lib、QtGui4.lib、QtSql4.lib;如下图所示:
4.这样并没有结束,因为如果要使用Qt的signal-slot机制,还必须做以下两个工作:
(1)如果要在类A里面声明和定义signals和slots,那么类A要继承QObject;
(2)在类A的private数据区里要加上Q_OBJECT宏。
5.若想程序能够正常运行,还必须手动生成moc_***.cpp文件(Qt原始工程会自动生成),具体生成方法可参考:vs2010中自动生成Qt的moc文件的方法
另:这之间还遇到一个错误:
error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall Widget::metaObject
解决方法请参考:http://blog.csdn.net/bzhxuexi/article/details/45482161
The End.