2011-05-18 122 views
6

我有一個程序,它編譯就好在了OpenSuse 11.2與QT 4.5版。然而,當我編譯使用了OpenSuse 11.4相同的程序與QT 4.7.3,我收到此錯誤信息:什麼導致這個QT 4.7.3錯誤?

"This file was generated using the moc from 4.7.3. It cannot be used with the include files from this version of Qt. The moc has changed too much" 

誰能告訴我這是怎麼回事?

+1

你嘗試過做一個「使清潔」刪除以前生成的文件,並重新運行「製造」之後呢? – Mat 2011-05-18 09:41:57

+4

你確定你還不知道如何使用Qt老版本的包含? – Bart 2011-05-18 09:43:28

+1

嘗試用乾淨的檢出/刪除所有moc _ /。moc文件,重新運行qmake 4.7.3並make。 – 2011-05-18 09:52:03

回答

8

發生此錯誤是因爲您正在使用在Qt的一個版本上編譯的項目。 這樣做的主要原因是Qt使用moc工具爲信號插槽處理和其他東西創建膠水代碼。

Moc的通過解析頭文件以查找用於創建此代碼等Q_OBJECT,信號:,時隙:等

此代碼被完全依賴於Qt的版本定義執行此操作。 在某些情況下,即使對於配置了不同選項集的相同版本的Qt庫,此代碼也完全不兼容。

此情況下是真實的,即使對於一些變化的.pro,例如,使用CONFIG + = no_keywords導致MOC生成不同的膠水代碼允許Qt來與其他庫諸如升壓,其提供使用類似Qt的相同的關鍵字信號時隙的機制作用。

因此,總之,只要你需要編譯Qt的項目針對不同的Qt庫,確保你做到以下幾點:1。 運行:make distclean命令 2.執行qmake的 3.運行:讓

這將永遠給你一個乾淨的構建樹。

+0

在cmake中make clean的等價物是什麼? – Owen 2011-05-19 05:35:37

+0

其:使清潔 – 2011-05-19 06:28:14

0

你爲什麼不創建一個使用新的版本(在你的情況下,它是4.7.3)和相應的頭文件中新的MOC。

moc ****.h -o ***.moc 
+0

在錯誤消息中,它似乎聲明它已使用當前MOC工具創建,但使用的標頭太舊。 – Bart 2011-05-18 09:55:27

2

在我的情況,那是因爲我是跑而不是「QMAKE-QT4」「QMAKE」。 「qmake」顯然是Qt3。我遇到這個在Fedora Core 16

爲什麼它不是分別「QMAKE-QT3」和「QMAKE」,我是無法理解。

+0

這真的搞砸了我......我應該拋棄QMAKE很久以前... – notlesh 2013-06-21 15:35:13