<QtEnvironmentVariables>
用于处理环境变量的辅助函数。更多内容...
| Header: | #include <QtEnvironmentVariables> |
函数
| QString | qEnvironmentVariable(const char *varName) |
| QString | qEnvironmentVariable(const char *varName, const QString &defaultValue) |
| int | qEnvironmentVariableIntValue(const char *varName, bool *ok = nullptr) |
(since 6.10) std::optional<qint64> | qEnvironmentVariableIntegerValue(const char *varName) |
| bool | qEnvironmentVariableIsEmpty(const char *varName) |
| bool | qEnvironmentVariableIsSet(const char *varName) |
| QByteArray | qgetenv(const char *varName) |
| bool | qputenv(const char *varName, QByteArrayView value) |
| bool | qunsetenv(const char *varName) |
详细说明
此头文件中的函数用于操作环境变量。
线程安全性
Qt XML 环境操作函数是线程安全的,但这要求不要直接调用 C 库中的等效函数,如getenv 和putenv 。
这一点也适用于应用程序加载的第三方库。如果此类库使用不安全的函数从次要线程操作环境,建议在加载库和/或创建次要线程之前,在主线程中完成所有环境设置。
函数文档
QString qEnvironmentVariable(const char *varName, const QString &defaultValue)
QString qEnvironmentVariable(const char *varName)
这些函数将环境变量varName 的值作为QString 返回。如果在环境中未找到变量varName ,且提供了defaultValue ,则返回defaultValue 。否则返回QString()。
Qt 的环境操作函数是线程安全的,但这要求不要直接调用 getenv 和 putenv 等等效的 C 库函数。
下表说明了如何在qgetenv()和qEnvironmentVariable()之间进行选择:
| 条件 | 建议 |
|---|---|
| 变量包含文件路径或用户文本 | qEnvironmentVariable() |
| Windows 专用代码 | qEnvironmentVariable() |
| Unix特有的代码,目标变量不是QString ,且/或用于与非Qt API进行交互 | qgetenv() |
| 目标变量是QString | qEnvironmentVariable() |
| 目标变量是QByteArray 或std::string | qgetenv() |
注意:在 Unix 系统上 ,如果原始字符串包含无法被区域设置编解码器解码的任意二进制数据,此函数可能会导致数据丢失。在这种情况下,请改用qgetenv()。在 Windows 系统上,此函数是无损的。
注意:变量名 varName 必须仅包含 US-ASCII 字符。
另请参阅 qputenv()、qgetenv()、qEnvironmentVariableIsSet()、qEnvironmentVariableIsEmpty() 和qEnvironmentVariableIntegerValue()。
[noexcept] int qEnvironmentVariableIntValue(const char *varName, bool *ok = nullptr)
返回环境变量varName 的数值。如果ok 不为空,则根据转换是否成功,将*ok 设置为true 或false 。
等同于
int to_int = qgetenv(varName).toInt(ok, 0);,但速度更快,且不会抛出异常。
另请参阅 qgetenv()、qEnvironmentVariable() 和qEnvironmentVariableIsSet()。
[noexcept, since 6.10] std::optional<qint64> qEnvironmentVariableIntegerValue(const char *varName)
返回环境变量varName 的数值。如果该变量未设置或无法解析为整数,则返回std::nullopt 。
与
int to_int = qgetenv(varName).toInt(ok, 0);,但速度快得多,且不会抛出异常。
如果零值在语义上等同于空变量或未设置的变量,应用程序可以使用
auto value = qEnvironmentVariableIntegerValue(varName).value_or(0);请注意,在此情况下,解析值失败也会返回零。
但如果零值可用于禁用某些功能,应用程序可以将返回的std::optional 与零进行比较,只有当该变量已设置且包含一个解析为零的数字时,该比较才会为真,如下所示:
bool equals_zero = qEnvironmentVariableIntegerValue(varName) == 0;该函数在 Qt 6.10 中引入。
另请参阅 qgetenv()、qEnvironmentVariable() 和qEnvironmentVariableIsSet()。
[noexcept] bool qEnvironmentVariableIsEmpty(const char *varName)
返回环境变量varName 是否为空。
等同于
bool is_empty = qgetenv(varName).isEmpty();,不同之处在于它可能快得多,且不会抛出异常。
另请参阅 qgetenv()、qEnvironmentVariable() 和qEnvironmentVariableIsSet()。
[noexcept] bool qEnvironmentVariableIsSet(const char *varName)
返回环境变量varName 是否已设置。
等同于
bool is_not_null = !qgetenv(varName).isNull();,但前者速度可能快得多,且不会抛出异常。
另请参阅 qgetenv()、qEnvironmentVariable()、qEnvironmentVariableIsEmpty() 以及qEnvironmentVariableIntegerValue()。
QByteArray qgetenv(const char *varName)
返回名称为varName 的环境变量的值,该值以QByteArray 的形式返回。如果环境中的确找不到该名称的变量,则该函数返回一个通过默认构造函数构造的QByteArray 。
Qt 的环境操作函数是线程安全的,但这要求不要直接调用 C 库中的等效函数(如 getenv 和 putenv)。
要将数据转换为QString ,请使用QString::fromLocal8Bit()。
注意:在 桌面版 Windows上 ,如果原始字符串包含 ANSI 编码无法表示的 Unicode 字符,qgetenv() 可能会导致数据丢失。请改用qEnvironmentVariable()。在 Unix 系统上,此函数不会造成数据丢失。
注意:此函数是线程安全的。
另请参阅 qputenv()、qEnvironmentVariable()、qEnvironmentVariableIsSet()、qEnvironmentVariableIsEmpty() 以及qEnvironmentVariableIntegerValue()。
bool qputenv(const char *varName, QByteArrayView value)
该函数用于设置名为varName 的环境变量的value 。如果该变量不存在,则会创建该变量。如果无法设置该变量,则返回0。
在 Windows 系统上,若向 qputenv 传入空值,将删除该环境变量;而在 Unix 系统上,则会将其设置为空值。为确保完全可移植性,建议优先使用qunsetenv()。
注意: 引入qputenv () 是因为标准 C 库中的 putenv() 在 VC2005(及后续版本)中已被废弃。qputenv() 在 VC 中使用替换函数,而在所有其他平台上调用标准 C 库的实现。
注意:在 Qt 6.5 之前的版本中,value 的参数是 `QByteArray`,而不是 `QByteArrayView`。
另请参见 qgetenv() 和qEnvironmentVariable()。
bool qunsetenv(const char *varName)
该函数将变量varName 从环境中删除。
成功时返回true 。
另请参阅 qputenv()、qgetenv() 和qEnvironmentVariable()。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.