【发布时间】:2012-12-21 10:42:30
【问题描述】:
我正在寻找 getenv 函数的等效项。
【问题讨论】:
标签: c++ qt environment-variables
我正在寻找 getenv 函数的等效项。
【问题讨论】:
标签: c++ qt environment-variables
Qt 有一个围绕getenv() 的包装器,称为qgetenv()。
QByteArray qgetenv ( const char * varName )
getenv() 是一个标准函数,但 Visual Studio 已弃用它,这就是 Qt 提供 qgetenv() 包装器的原因。
请注意,如果您对获取标准文件系统位置(如主目录、应用程序数据目录等)感兴趣,则应改为使用 QDesktopServices::storageLocation() (Qt 4) 或 QStandardPaths::writableLocation() (Qt 5)。
【讨论】:
对于 Qt,在访问环境变量时还有一种“高级”方法。这只有在您的 Qt 应用程序在 QCoreApplication 中运行时才有效,大多数 Qt 应用程序都应该是这种情况。
在这种情况下,对于至少 4.6 的 Qt 版本,您可以使用 QProcessEnvironment。您可以通过使用访问当前进程环境
QProcessEnvironment::systemEnvironment();
您可以通过
查询任何变量QProcessEnvironment::systemEnvironment().value("<variablename>", "<defaultvalue>");
这应该比在大多数情况下使用 getenv/qgetenv 方法更方便,因为这会以更通用的方式隐藏操作系统实现,恕我直言,它也是一种更“类似 Qt”的方法。
【讨论】:
getenv 不同,它正确支持包含Unicode 字符的环境变量。
QProcessEnvironment 旨在与 QProcess 一起使用,为子进程设置环境。 不能用来改变当前进程的环境,见文档[QProcessEnvironment](doc.qt.io/qt-5/qprocessenvironment.html#details)