最近遇到一个问题,希望可以有大佬可以探讨一下。
环境:VS2017+Qt5.14.2; 工具->扩展和更新->Qt Visual Studio Tools->版本:2.5.1
项目中添加了一个纯C++类的.h和.cpp,为了可以在这个类中使用Qt的信号槽机制,将.h中的纯C++类继承QWidget,并且在类中添加Q_OBJECT。
曾经使用的Qt Visual Studio Tools版本是2.7.1,编译运行是没有问题的,后改成版本2.5.1后出现以下错误:
编译时报错: 1>c1xx : fatal error C1083: 无法打开源文件:“x64\Debug\Res\src\Vlc\include\moc_AVPlayer.cpp”: No such file or directory。
moc_AVPlayer.cpp文件是在程序编译过程中动态生成的,经过查找发现moc_AVPlayer.cpp文件是成功生成了的,但是生成的路径是x64\Res\src\Vlc\include,生成路径和报错路径不一致,
正常情况下,moc_.cpp文件应该生成在x64\Debug\moc或x64\Release\moc目录下,不知道为什么这个文件的生成路径和其他文件的生成路径不一致,并且生成成功后,编译找的路径不对。
解决办法: 将生成的moc_.cpp放到指定目录下,再编译就成功了。但是这个方法没办法从根上解决这个问题,一旦这个文件发生变化的时候,还需要再手动将moc_.cpp放到指定目录下。
之前遇到过类似情况,解决办法是:在VS中选中该文件的.h,右键打开属性,将常规中的项类型改为其他编译正常的文件的项类型,就可以了。但是这个文件的属性中的项类型,以及项类型的详细信息的设置都和其他文件一模一样,尝试过1.将文件改名重新加入;2.重新设置文件属性;3重新添加文件后编译都不行。感觉是工具集版本不一致造成的,但是具体原因和解决办法还是没有找到。
总结:如果没有成功生成moc_xxx.cpp文件,应该在VS中选中该文件的.h,右键打开属性,将常规中的项类型改为其他编译正常的文件的项类型。 如果成功生成了moc_xxx.cpp文件,只是编译路径与生成路径不符,应该手动将生成的moc_.cpp放到指定目录下。
如果有更好的解决办法,希望可以在评论区聊一下!