Qtの基礎 - 環境変数の取得
ナビゲーションに移動
検索に移動
概要
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
}