本页内容

QProcessEnvironment Class

QProcessEnvironment 类用于存储可传递给程序的环境变量。更多内容...

头文件: #include <QProcessEnvironment>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注意:该类中的所有函数均为可重入的。

QProcessEnvironment 比较

类别可比较的类型
相等性QProcessEnvironment

公共类型

(since 6.3) enum Initialization { InheritFromParent }

公共函数

QProcessEnvironment()
(since 6.3) QProcessEnvironment(QProcessEnvironment::Initialization)
QProcessEnvironment(const QProcessEnvironment &other)
~QProcessEnvironment()
void clear()
bool contains(const QString &name) const
(since 6.3) bool inheritsFromParent() const
void insert(const QString &name, const QString &value)
void insert(const QProcessEnvironment &e)
bool isEmpty() const
QStringList keys() const
void remove(const QString &name)
void swap(QProcessEnvironment &other)
QStringList toStringList() const
QString value(const QString &name, const QString &defaultValue = QString()) const
QProcessEnvironment &operator=(const QProcessEnvironment &other)

静态公共成员

QProcessEnvironment systemEnvironment()
bool operator!=(const QProcessEnvironment &lhs, const QProcessEnvironment &rhs)
bool operator==(const QProcessEnvironment &lhs, const QProcessEnvironment &rhs)

详细说明

进程的环境由一组称为环境变量的“键=值”对组成。QProcessEnvironment 类封装了这一概念,并允许轻松操作这些变量。该类旨在与QProcess 配合使用,以设置子进程的环境。它不能用于更改当前进程的环境。

可通过QProcessEnvironment::systemEnvironment() 获取调用进程的环境。

在 Unix 系统中,变量名区分大小写。请注意,Unix 环境允许变量名和内容均包含任意二进制数据(NUL 字符除外)。QProcessEnvironment 将保留此类变量,但不支持操作那些名称或值无法被当前区域设置编码的变量(参见QString::toLocal8Bit )。

在 Windows 系统上,变量名不区分大小写,但会保留大小写。QProcessEnvironment 的行为与此一致。

安全注意事项

通过新增环境变量来扩展进程环境,或调整PATH ,可能会使系统面临安全漏洞风险,例如通过执行不可信的二进制文件。因此,建议在将用户输入传递给进程环境之前对其进行验证。

另请参阅 QProcess 、QProcess::systemEnvironment() 和QProcess::setProcessEnvironment()。

成员类型文档

[since 6.3] enum QProcessEnvironment::Initialization

此枚举包含一个用于消除构造函数歧义的标记。

常量值描述
QProcessEnvironment::InheritFromParent0将创建一个QProcessEnvironment ,当将其设置在QProcess 上时,会使其继承父类的变量。

该枚举在 Qt 6.3 中引入。

成员函数文档

QProcessEnvironment::QProcessEnvironment()

创建一个新的 QProcessEnvironment 对象。此构造函数会创建一个空环境。如果在QProcess 上设置此构造函数,将导致当前的环境变量被移除(Windows 系统上的 PATH 和 SystemRoot 除外)。

[noexcept, since 6.3] QProcessEnvironment::QProcessEnvironment(QProcessEnvironment::Initialization)

创建一个对象,当将其设置为QProcess 时,将导致该命令以继承自父进程的环境变量的方式执行。

注意: 生成的对象 本身并不存储任何环境变量,它只是指示 `QProcess ` 在新进程启动时安排环境变量的继承。向生成的对象添加任何环境变量都会禁用环境的继承,并导致环境仅包含所添加的环境变量。

如果需要父进程环境的修改版本,请从 `systemEnvironment() ` 的返回值开始,并对该值进行修改(但请注意,在该环境创建之后对父进程环境所做的更改将不会反映在修改后的环境中)。

该函数在 Qt 6.3 中引入。

另请参阅 inheritsFromParent() 和systemEnvironment()。

QProcessEnvironment::QProcessEnvironment(const QProcessEnvironment &other)

创建一个 QProcessEnvironment 对象,该对象是other 的副本。

[noexcept] QProcessEnvironment::~QProcessEnvironment()

释放与该QProcessEnvironment 对象关联的资源。

void QProcessEnvironment::clear()

从该QProcessEnvironment 对象中移除所有键值对,使其变为空。

如果该环境是通过 `QProcessEnvironment::InheritFromParent ` 构建的,则保持不变。

另请参阅 ` isEmpty()` 和 `systemEnvironment()`。

bool QProcessEnvironment::contains(const QString &name) const

如果在此QProcessEnvironment 对象中找到了名为name 的环境变量,则返回true 。

另请参阅 insert() 和value()。

[since 6.3] bool QProcessEnvironment::inheritsFromParent() const

如果该QProcessEnvironment 是使用QProcessEnvironment::InheritFromParent 构造的,则返回true 。

该函数在 Qt 6.3 中引入。

另请参阅 isEmpty()。

void QProcessEnvironment::insert(const QString &name, const QString &value)

将名称为name 、内容为value 的环境变量插入到此QProcessEnvironment 对象中。如果该变量已存在,则会被新值替换。

在大多数系统上,插入一个没有内容的变量对应用程序而言,其效果与该变量根本未被设置时相同。但是,为了确保没有兼容性问题,若要删除变量,请使用remove() 函数。

另请参阅 contains()、remove() 和value()。

void QProcessEnvironment::insert(const QProcessEnvironment &e)

将e 中的内容插入到此QProcessEnvironment 对象中。该对象中与e 中同名的变量将被覆盖。

这是一个重载函数。

bool QProcessEnvironment::isEmpty() const

如果该QProcessEnvironment 对象为空(即未设置任何键值对),则返回 `true `。

对于使用QProcessEnvironment::InheritFromParent 构建的对象,此方法也会返回true 。

另请参阅 clear()、systemEnvironment()、insert() 和inheritsFromParent()。

QStringList QProcessEnvironment::keys() const

返回一个包含该QProcessEnvironment 对象中所有变量名的列表。

对于使用 `QProcessEnvironment::InheritFromParent` 构建的对象,返回的列表为空。

void QProcessEnvironment::remove(const QString &name)

从该QProcessEnvironment 对象中移除由name 标识的环境变量。如果该变量此前并不存在,则不会执行任何操作。

另请参阅 contains()、insert() 和value()。

[noexcept] void QProcessEnvironment::swap(QProcessEnvironment &other)

将此进程环境实例与other 进行交换。此操作非常快速,且绝不会失败。

[static] QProcessEnvironment QProcessEnvironment::systemEnvironment()

systemEnvironment 函数返回调用该函数的进程的环境。

返回值为一个 `QProcessEnvironment` 对象。该函数不会缓存系统环境。因此,如果调用了诸如 `setenv ` 或 `putenv ` 之类的低级 C 库函数,则有可能获取到环境的更新版本。

但请注意,重复调用此函数会重新创建 `QProcessEnvironment ` 对象,这是一项非平凡的操作。

另请参阅 QProcess::systemEnvironment()。

QStringList QProcessEnvironment::toStringList() const

将此QProcessEnvironment 对象转换为一个字符串列表,其中每个字符串对应一个已设置的环境变量。环境变量的名称与其值之间以等号('=')分隔。

该函数返回的QStringList 内容适合直接展示。不建议将其与QProcess::setEnvironment函数配合使用,因为在Unix系统下可能会出现编码问题,且性能较差。

另请参阅 systemEnvironment()、QProcess::systemEnvironment() 以及QProcess::setProcessEnvironment()。

QString QProcessEnvironment::value(const QString &name, const QString &defaultValue = QString()) const

在此QProcessEnvironment 对象中搜索由name 标识的变量,并返回其值。如果在该对象中未找到该变量,则返回defaultValue 。

另请参阅 contains()、insert()、remove()。

QProcessEnvironment &QProcessEnvironment::operator=(const QProcessEnvironment &other)

将other QProcessEnvironment 对象的内容复制到该对象中。

相关的非成员

[noexcept] bool operator!=(const QProcessEnvironment &lhs, const QProcessEnvironment &rhs)

如果进程环境对象lhs 和rhs 不同,则返回true 。

另请参阅 operator==()。

[noexcept] bool operator==(const QProcessEnvironment &lhs, const QProcessEnvironment &rhs)

如果进程环境对象lhs 和rhs 相等,则返回true 。

如果两个QProcessEnvironment 对象具有相同的键值对集合,则视为相等。在环境区分大小写的平台上,键的比较区分大小写。

另请参阅 operator!=() 和contains()。

© 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.