2017-03-31 97 views
-2

對不起,如果這個問題沒有任何意義,但它只是在我的腦海中想到,我在很長一段時間尋找一個解決方案,但最終我想更好地與專家覈對。 :)修改QT在C++文件中定義的.pro文件

下面是一個情景:

  1. 設在myProject.pro文件,我有 PATH = /家庭/本地/項目/ 爲此,我創建了一個QT DEFINE使用以下: 定義+ = PATH = \\「$$ {PATH} \\」
  2. 現在,我可以使用這個「路徑」任何地方在我的項目中基於CPP文件。這如果完全好。現在

  3. ,根據來自用戶的輸入,我想改變這種 「PATH」 說,路徑可以是: PATH = /家庭/本地/項目/ TEST1/

    PATH = /home/local/Projects/TEST2/ 
    
         and revert to 
    
    PATH = /home/local/Projects/ 
    

因此,無論我在項目中使用此「路徑」的位置都會自動更改。

我知道這是在編譯時完成的。但有一個想法。所以想要得到專家的反饋。

回答

0

你所說的「Qt define」實際上是預處理器宏,它是在命令行中給編譯器的,而不是用#define將它包含到源代碼文件中。你可以使用它作爲文字來初始化一個全局變量的「默認」值,如果不是const,它可以在代碼中改變。

0

一種簡單的方法:使用一個全局配置對象,該對象將PATH文字的值作爲其path成員的默認值。該默認值可以由用戶再變:

class Configuration { 
    Q_DISABLE_COPY(Configuration) 
    static Configuration * self; 
public: 
    static Configuration * instance() { return self; } 
    Configuration() { 
    Q_ASSERT(!self); 
    self = this; 
    } 
    ~Configuration() { self = {}; } 

    QString path{PATH}; 
}; 

Configuration * Configuration::self; 

int main(int argc, char ** argv) { 
    Configuration configuration; 
    QApplication app{argc, argv}; 
    ... 
    qDebug() << Configuration::instance()->path; 
} 

每當你想全局訪問配置,使用Configuration::instance()靜態方法來獲得實例,然後使用它的path成員。它將默認設置爲硬編碼PATH,但您可以隨時更改它。

Configuration::instance()實現與QCoreApplication::instance()相同的習慣用法:它允許您訪問全局唯一值,而不會受到靜態初始化順序失敗的影響。