2013-01-22 67 views
6

我在VS2010中使用Qt 4.7.4編寫了一個C++項目,而且我經常遇到IntelliSense問題(因爲我們都這麼做......)。一個特定的問題是有時函數體(在.cpp文件中)找不到。如果我點擊該功能體,下拉框(通常顯示你所在的功能)是空的。爲什麼Q_FOREACH宏會打破VS2010智能感知?

今天我注意到這種行爲後,我添加了foreach()語句(Qt宏Q_FOREACH)。然後,我用相應的for(int i = 0; i < ...)替換了foreach()宏,並且智能感知立即再次顯示該函數。

所以我想知道:

  1. 有人可以請驗證此行爲,告訴我這樣的評論?
  2. 爲什麼會發生這種情況嗎?
  3. 有沒有讓我繼續使用Q_FOREACH的解決方法?
+1

我無法驗證它,因爲我只有2008年和Intellisense被我們這個相當大的項目所壓倒,它有很多問題很難完全實現。但是,我正在做的是:我在Qt Creator中開發*並在Visual Studio中編譯和調試*。這對我來說是兩個世界的最佳組合。很明顯,你需要在'中管理項目。pro'文件並使用'qmake -tp vc -recursive .pro'或將視覺工作室添加到 –

+0

中,使用'Q_FOREACH'替換'foreach()'並指定'CONFIG + = no_keywords'時會發生什麼? – UmNyobe

+0

@UmNyobe我試着用'Q_FOREACH'替換'foreach()'而沒有任何效果。恐怕我不知道如何添加'no_keywords',因爲在VS2010中沒有'.pro'文件。你知道哪些是項目屬性頁面中的相應字段嗎?然而,'no_keywords'意味着我不得不用'Q_SIGNAL'替換所有'signal' - 這比重寫所有foreach()更麻煩。 –

回答

8

您必須使用'cpp.hint'文件的概念。

基本上,你必須把麻煩的宏放到一個名爲'cpp.hint'的文件中,並將該文件放到你的解決方案目錄中(這對我來說不適用 - 也許是非標準的項目佈局) 。您的代碼文件所在目錄(爲我工作)

在該文件中,你只要把麻煩宏而不右手側,所以在您的情況:

#define foreach() 

也許更好

#define Q_FOREACH(variable, container) 
#define foreach(...) 
etc. 

請注意,在將定義放入cpp.hint文件後,您可能必須重新掃描或重新啓動或調用要設置的效果函數。

UPDATE:的確,我剛剛發現,我必須對一個.cpp文件進行一些更改(例如添加一個新行)才能啓動該效果。該修復不會自動應用。

原路段是: http://msdn.microsoft.com/en-us/library/dd997977.aspx

的原因麻煩的是,智能感知性能會(潛在的)顯着降低,如果它不得不解析項目中的所有宏,因此它只分析那些明確給出「 cpp.hint」。

原始的微軟文字說,你可以使用「從源文件的根目錄到包含源文件本身的目錄的路徑。在典型的Visual C++項目中,根目錄包含解決方案或項目文件。「

您可以在主 'cpp.hint' 文件 'C:\ Program Files文件(x86)的\微軟的Visual Studio 12.0 \ VC \ vcpackages' 參考

+0

這是絕對正確的。 –