Qtの基礎 - 環境変数の取得

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

Qtにおいて、システムの環境変数を取得する手順について記載する。


qgetenv関数

以下の例では、環境変数USER(または、USERNAME)を取得している。

 int main(int argc, char *argv[])
 {
    QString name = qgetenv("USER");  // Linux or MacOS
    if(name.isEmpty())
    {  // Windows
       name = qgetenv("USERNAME");
    }
 
    std::cout << name << std::endl;
 
    return 0;
 }



QStandardPaths関数

QStandardPaths関数は、異なるユーザのホームディレクトリを取得することはできない。

以下の例では、現在ログインしているユーザのホームディレクトリのフルパスを取得している。

 #include <QStandardPaths>
 
 int main(int argc, char *argv[])
 {
    QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
    std::cout << homePath.first().split(QDir::separator()).last();
 
    return 0;
 }



外部プロセスの実行およびプラットフォーム固有のAPI

上記の環境変数やホームディレクトリの取得のように、ソフトウェアの下で簡単に変更できないため、最も信頼性が高い方法である。

Linuxにおいて、QProcessクラスを使用してwhoamiコマンドを呼び出す。
Windowsでは、GetUserName WinAPIを使用する。

 #include <QCoreApplication>
 #include <QProcess>
 
 int main(int argc, char *argv[])
 {
 // Strictly pseudo code!
 #ifdef Q_OS_WIN
    char acUserName[MAX_USERNAME];
    DWORD nUserName = sizeof(acUserName);
    if (GetUserName(acUserName, &nUserName))
    {
        std:cout << acUserName << std::endl;
    }
 
    return 0;
 #elif Q_OS_UNIX
    QCoreApplication coreApplication(argc, argv);
    QProcess process;
    QObject::connect(&process, &QProcess::finished, [&coreApplication, &process](int exitCode, QProcess::ExitStatus exitStatus)
                                                    {
                                                       std::cout << process.readAllStandardOutput() << std::endl;
                                                       coreApplication.quit();
                                                    });
    process.start("whoami");
 
    return coreApplication.exec();
 #endif
 }