2013-01-07 58 views

答えて

19

Qtには、qgetenv()と呼ばれるgetenv()のラッパーがあります。

QByteArray qgetenv (const char * varName) 

getenv()標準機能ですが、Visual StudioはQtはqgetenv()ラッパーを提供する理由であることを推奨していません。

標準のファイルシステムの場所(ホームディレクトリ、アプリケーションデータディレクトリなど)を取得する場合は、代わりにQDesktopServices::storageLocation()(Qt 4)またはQStandardPaths::writableLocation()(Qt 5)を使用する必要があります。

+0

これは、%PATH%などの環境変数を展開する関数ですか?たとえば、私のプロセスを呼び出す前にコマンドラインから設定したカスタム環境変数は? – sashoalm

+1

@satuonいいえ。ユーザーのホームディレクトリやアプリケーションデータディレクトリのような標準的な場所が得られます。その他。もちろん、カスタム環境変数はgetenv()で取得する必要があります。 Qtはgetenv()を抽象化していません。なぜなら、それはすべての標準C++コンパイラで利用できる標準関数だからです。 –

+0

実際には、qgetenvがあります。http://doc.qt.digia.com/qt/qtglobal.html#qgetenv「qgetenv()」は、標準Cライブラリのgetenv()がVC2005以降のバージョンで廃止されたために導入されましたqgetenv()はVCの新しい置換関数を使用し、他のすべてのプラットフォームで標準のCライブラリの実装を呼び出します。 –

6

Qtの場合、環境変数にアクセスするときに「高レベル」のアプローチもあります。これは、QtアプリケーションがQCoreApplication内で実行されている場合にのみ機能します.QtoreApplicationはほとんどのQtアプリケーションで使用します。

この場合、Qtバージョン4.6以上の場合はQProcessEnvironmentを使用できます。あなたは

QProcessEnvironment::systemEnvironment(); 

を使用して、現在のプロセス環境にアクセスすることができますし、これはほとんどの場合でのgetenv/qgetenvのアプローチを使用すると、これは、動作をシャドウとしてすることがより便利にする必要があります

QProcessEnvironment::systemEnvironment().value("<variablename>", "<defaultvalue>"); 

経由で任意の変数を照会することができますより一般的な方法でのシステム実装であり、IMHOはもっと "Qtに似た"アプローチでもあります。

+0

また、 'getenv'とは異なり、Unicode文字を含む環境変数を正しくサポートしています。 –

関連する問題