一个包含Q_OBJECT宏的头文件,必定有一个对应的moc文件。
如果编译时,发现一个头文件有Q_OBJECT宏,但却没找到其对应的moc文件,会报无法解析的外部符号,如下:
手动生成
如果使用命令的话,需要用到moc.exe,这个文件位于Qt的bin路径下,比如我的:C:\Qt5.6.0\5.6\msvc2013\bin
一般安装Qt后会将这个目录加到环境变量中,所以,直接在CMD中调用即可。
命令格式为:
moc xxx.h -o moc_xxx.cpp
比如,在文件夹下,按住shift,右键,在此处打开命令窗口,输入:
moc ../FaceReco.h -o moc_FaceReco.cpp
这里是将当前执行目录 上一层目录的FaceReco.h生成moc_FaceReco.cpp放在当前执行目录下。
生成后,需要在工程中包含此cpp文件。
当然,如果需要手动生成的moc文件较多,可以新建一个txt文本,将所有命令写入进去,一条命令一行,回车键换行,保存后将txt后缀修改为bat,双击运行即可。
另外,可参考:VS+Qt5不自动生成moc文件的解决方法