2012-08-11 250 views
1

當我在Qt Creator中創建一個新的移動應用程序時,我注意到在自動生成的代碼中,他們使用#include <QtCore/QCoreApplication>而不是#include <QCoreApplication>,一樣。「#include <QtCore/QCoreApplication>」與「#include <QCoreApplication>」

由於Qt Creator本身就是這樣做的,我認爲這是推薦的約定。但是有什麼理由這樣,有人可以解釋什麼是使用#include <QtCore/QCoreApplication>而不是#include <QCoreApplication>

+0

這真的和Qt無關,它只是一個關於你應該在代碼文件中限定包含路徑的深度的問題。我真的不認爲有「推薦的約定」。你只是在你的環境中做任何有意義的事情。 – 2012-08-11 08:05:10

回答

3

有使用這種慣例多個原因: -

  1. 如果包含路徑在編譯器是在QtCore的目錄水平,那麼它會跟蹤包括文件QCoreApplication從那裏。
  2. 由於有存在於同一目錄的Qt的多個版本時,優選使用該丟棄歧義的公約。(由於兩個QCoreApplication一個屬於QT3和其他的Qt4會誤導編譯器)

我有兩個目錄在/ usr/include中/

  • QtCore
  • 的Qt

它們都有QCoreApplication 在他們中。

1

對於從表單生成的代碼,您可以在「Designer」選項卡選項中更改:「在#include-directive中使用Qt模塊名稱」。

指定模塊時,我注意到一個小問題,但有時很煩人。默認情況下,qmake添加/path/to/qt/sdk/include以包含路徑。這意味着,你可以做例如

#include <QtGui/QWidget> 

即使在您的項目文件,你有

QT -= gui 

然後編譯去罰款,但鏈接器會生你的氣,因爲QtGui4庫不會被選中進行鏈接。

如果你沒有

#include <QWidget> 

編譯反而會失敗。

+0

不指定模塊的另一個原因是我之前看到的是Qt5遷移和QtGui與QtWidget,如果你沒有指定模塊,你可以讓你的項目在兩者上編譯。 – sashoalm 2013-11-04 14:33:56