原因是加入Q_OBJECT這個macro的類,被編譯的時候就要用到moc這個命令,所以在VS2010中,沒有加入此命令的應用,當然會出錯了。所以解決辦法是加,或者如果你不使用信號槽可以直接刪除。
當要在GUI中用到信號與槽,就需在.h文件中的類里寫入Q_OBJECT宏。而任何含有Q_Object的類都必須使用Qt的moc工具生成對應的cpp文件,然后在項目里面包含這個cpp,編譯才能成功,否則會出錯鏈接錯誤,moc yourfilename.h -o moc_youfilename.cpp,這是moc命令行的使用。
Qt自動生成moc文件:
命令行生成moc文件的方式:
cd C:/Qt/4.7.1/bin
moc .h文件群路徑 -o 要生成的moc文件的全路徑;
例如:
VS中不是用addin創建的項目,自動生成moc文件的設置:
在VS的解決方案管理器里面,右鍵需要生成moc文件的頭文件-打開屬性窗口;
常規-項類型,選擇自定義生成工具;
關閉屬性窗口重新打開,就出現了自定義生成工具選項;
自定義生成工具-常規:
命令行:"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"
輸出:.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
將輸出視為內容:是
鏈接對象:是
如果編譯還有問題,在解決方案資源管理器里阿敏,右鍵生成的moc文件打開屬性窗口;
配置屬性-常規:設置下在debug和release下面分別設置下是否在項目中排除的屬性;
references:
http://blog.csdn.net/zxgis/article/details/8243493
http://liangbing8612.blog.51cto.com/2633208/596269
http://www.cnblogs.com/liuyunfeifei/archive/2013/05/01/3052856.html
http://blog.csdn.net/hackbuteer1/article/details/6573317
http://stackoverflow.com/questions/7272040/q-object-problem-in-visual-c
http://blog.sina.com.cn/s/blog_687960370101dd79.html
http://stackoverflow.com/questions/14170770/unresolved-external-symbol-public-virtual-struct-qmetaobject-const-thiscal
http://blog.csdn.net/xiaofengkuang/article/details/9999147
一個搜索時候搜索到的關於用VS2010重新編譯Qt的附屬產物:
http://stackoverflow.com/questions/5601950/how-to-build-qt-for-visual-studio-2010