2017-03-31 14 views
-2

申し訳ありませんが、この質問が意味をなさないが、ちょうど私の心に来た、私はかなり長い時間からこれについての解決策を探していたが、専門家に確認することをお勧めします。 :)以下は QTを修正するC++ファイルから.proファイル内に定義

はシナリオです:

myProject.proファイルで
  1. と仮定、私は PATH = /ホーム/ローカル/プロジェクト/私はQTを作成した 以下使用して定義があります。 DEFINESを+ = PATH = \\ "$$ {PATH} \\"
  2. 今、私はCPPファイルに基づいて私のプロジェクトでこの "PATH"を使用することができます。これは完璧です。

  3. に、ユーザからの入力に応じて、私はこの "PATH" を変更したい たとえば、PATHを指定できます PATH = /ホーム/ローカル/プロジェクト/ TEST1/

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

それで、私がプロジェクトでこの "PATH"を使用している場所は、自動的に変更されます。

私はこれがコンパイル時に行われることを知っています。しかし、考えが来た。だから、専門家からのフィードバックを得たいと思った。

答えて

0

"Qt define"と呼ばれるものは、実際にプリプロセッサマクロです。プリプロセッサマクロは、コマンドラインでコンパイラに与えられ、#defineを含むソースコードファイルに含まれています。リテラルとして使用してグローバル変数を "default"値で初期化することができます。デフォルト値は、constでない場合はコード内で変更できます。

0

単純なアプローチの1つ: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; 
} 

あなたは、そのpathメンバーを使用して、インスタンスを取得するためにConfiguration::instance()静的メソッドを使用して、グローバルコンフィギュレーションにアクセスしたいときはいつでも。デフォルトではハードコードされたPATHに設定されますが、いつでも変更できます。

は、QCoreApplication::instance()と同じイディオムを実装しています。静的な初期化順序の失敗を起こさずに、グローバルに一意の値にアクセスできます。

関連する問題