2011-09-01 38 views
1

我已收到來自我們客戶的基於Visual C++ QT的項目。我已經安裝了QT庫,然後編譯了這個項目。該項目編譯沒有任何問題。Q_OBJECT Visual C++中的問題

現在,我需要在現有項目中增加一個新的GUI界面。我在QT設計器中創建了一個GUI,然後保存在VC++項目的源代碼目錄中。然後,我爲新的GUI編寫了.h和.cpp文件,並可以調用此接口。當我在.h文件中包含Q_OBJECT時,現在我需要包含SIGNALS和SLOTS。我有編譯錯誤。

這些都是錯誤的,請幫我解決這個問題

unresolved external symbol "public: virtual struct QMetaObject const * __thiscall BetaLineServer::metaObject(void)const " (?metaObject) 

unresolved external symbol "public: virtual void * __thiscall BetaLineServer::qt_metacast(char const *)" 

unresolved external symbol "public: virtual int __thiscall BetaLineServer::qt_metacall(enum QMetaObject::Call,int,void * *)" ([email protected] 
+0

聲音像一些文件不會通過moc。你有.pro文件嗎?添加新文件,並嘗試使用qmake – pezcode

回答

2

你可能只需要你的.ui,的.cpp和.h文件添加到項目文件。

Qt將在ui文件上運行'moc',如果它在那裏列出的話,它將創建源代碼來提供缺失的符號。

+0

重新生成VC項目謝謝sje397 ....它現在正在工作.... – lankabeta

4

任何時候你添加一個Q_OBJECT宏到一個類,你需要確保重新運行qmake然後編譯。

+0

感謝您的回覆 – lankabeta

+0

你如何運行qmake? – Matthew

4

您只需要使用包含Q_OBJECT宏的moc編譯頭文件即可。以及如何做到這一點?這裏是

  1. 您可以手動鍵入編譯MOC或UIC文件或

  2. 命令 - >安裝Qt的VS插件。 http://qt.nokia.com/downloads/visual-studio-add-in

    - >現在,打開Visual Studio,並在here和描述的創建一個新的Qt項目,然後

    - 在包含Q_OBJECT宏,你應該找到類似下面一個頭文件>右鍵單擊。將這些命令複製到您的項目中。

    - >在「命令行」命令替換你的頭文件名

    - >編譯一次,應該產生moc_xxxxx.cpp文件,包括他們在您的項目。

enter image description here

  • 以供將來參考,如果使用這個插件創建在VS一個Qt項目你應該有這些命令自動添加
  • +0

    您還需要將moc的輸出添加到項目中,以便編譯它。 –

    +0

    @Dusty:是的,忘了 – blueskin

    +0

    感謝您的回覆 – lankabeta

    1

    排除.h文件並再次包含它 - moc_.cpp將出現在「生成的文件」中,鏈接錯誤消失。