QT解決方案中新建動態鏈接庫工程,且繼承於QObject,解決無法生成moc_XXX.cpp文件的問題,解決工程之間的引用問題


問題描述:

目的是利用QT和C++完成一套自動化設備的軟件設計,在一個解決方案中有三個工程,分別是上位機(包括界面,MVC框架等)、運動部分工程、圖像部分工程。如下圖所示:

其中StemCells為上位機(包括界面,MVC框架等)工程、SCSModuleMotion為運動部分工程,SCSModuleVision為圖像部分工程,而且StemCells為QT Application工程,SCSModuleMotion和SCSModuleVision為QT Library工程(生成動態鏈接庫)。

問題來源於:因為SCSModuleMotion和SCSModuleVision需要與StemCells之前通過信號和槽來通信,所以這兩個QT 動態鏈接庫工程也需要繼承於QObject類,並且需要有moc_XXXX.cpp文件,但是在新建了動態鏈接庫時沒有繼承於QObject基類。

這樣這兩個工程就不能通過signal和slot方式與上位機工程通信,並且直接編譯程序也不會有moc文件生成。

解決方法:

1.首先如上圖手動加上OBject基類;

2.設置使可以生成moc文件:

  (1)選中需要生成moc文件的對應的.h文件,右擊→屬性→常規→右側最后一項(項類型)→選擇自定義生成工具→點擊右下角應用→左側常規下面對出一項(自定義生成工具)。      

  (2)然后點開自定義生成工具,此時右側全是空的,找一個可以生成moc文件的.h文件,同樣操作,仿照那個文件在這里填上自定義生成工具。

 

  (3)這時候,編譯程序可以生成moc文件,並且保存在本地工程目錄的Generated Files→Debug中,但是在VS界面該工程的Generated Files→Debug目錄中沒有該文件,這時需要郵寄Debug添加現有項將該文件加入。

3.這時候編譯工程礽有錯,雖然生成了moc文件,但是仍會報錯,大致內容是“找不到QObject基類”

  解決方法:因為新建后的工程沒有繼承於QObject基類,所以沒有引用QObject的頭文件(只在global.h文件中引用了#include <QtCore/qglobal.h>),

        只需要再添加#include <QtCore/QObject>即可。

4. 此時編譯的話可能還會報錯,顯示找不到QT執行程序的路徑,這時候需要檢查一下右擊工程→屬性→配置屬性→調試→環境這里有沒有把QT環境變量添加進來,如下圖所示:

這些都設置完,dll工程編譯應該就沒有問題了。

5. 但是這時雖然編譯工程沒有錯誤了,但是當上位機工程引用該動態鏈接庫工程時還會出錯(各種無法引用的工程),這時候需要右擊上位機工程→屬性→通用屬性→引用→將動態鏈接庫工程添加至引用,如下圖:

將上述所有步驟做完之后,工程編譯便沒有錯誤了,並且都可以與上位機工程進行信號和槽的通信。

 

另外在創建moc文件時,如果創建不正確需要重新創建或者moc文件又丟失了需要重新創建,這時只需要將對應的.h文件移除(不是刪除)工程,然后再添加回來即可重新生成moc文件。

 


免責聲明!

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



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