Qt編程之信號與槽-------unresolved external symbol "public: virtual struct QMetaObject const * __thiscall XX::metaObject(void)const


原因是加入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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM