1. 前言
在软件开发中可能有需求修改用户环境变量,添加新的值进行。比如:添加某些可执行文件、某些动态库的路径到系统环境PATH中,能够让可执行文件运行过程中可以找到对应的dll。
在Qt里可以使用QSettings
来实现,QSettings类提供一个独立于平台的应用程序设置,Qt已经封装好,修改、读取用户的环境变量不需要管理员权限,并且修改也是直接针对系统的环境配置进行修改,并非当前进程有效(所以修改要谨慎操作)。
2. QSettings
QSettings可以修改注册表,支持存储自定义数据格式,通常可以保存应用程序设置,保存和恢复应用程序设置。
QSettings的详细功能在Qt帮助页面有详细的介绍,当前这里只是列出QSettings修改用户环境变量的一个使用案例,其他功能不做详细介绍。
下面是来至Qt帮助页面的介绍:
QSettings类提供持久的独立于平台的应用程序设置。
用户通常期望应用程序在会话中记住其设置(窗口大小和位置、选项等)。这些信息通常存储在Windows上的系统注册表中,以及macOS和iOS上的属性列表文件中。在Unix系统上,在没有标准的情况下,许多应用程序(包括KDE应用程序)使用INI文本文件。
QSettings是围绕这些技术的抽象,使能够以可移植的方式保存和恢复应用程序设置。它还支持自定义存储格式。
QSettings的API基于QVariant,允许以最小的工作量保存大多数基于值的类型,如QString、QRect和QImage。
如果只需要一个基于非持久内存的结构,请考虑使用QMap< QString,QVariant >。
基本用法
创建QSettings对象时,必须传递公司或组织的名称以及应用程序的名称。例如,如果的产品名为Star Runner,而的公司名为MySoft,则可以按照如下方式构造QSettings对象:
Q设置("MySoft"、"Star Runner");
QSettings对象可以在堆栈上或堆上创建(即使用new)。构造和销毁QSettings对象非常快。
如果在应用程序中使用来自多个位置的QSettings,则可能需要使用QCoreApplication::setOrganizationName()和qCoreApp::setApplicationName()指定组织名称和应用程序名称,然后使用默认的QSetting构造函数:
QCoreApplication::setOrganizationName("MySoft");
QCoreApplication::setOrganizationDomain("mysoft.com");
QCoreApplication::setApplicationName("明星跑步者");
...
Q设置设置;
(这里,我们还指定了组织的Internet域。当设置Internet域时,它将在macOS和iOS上使用,而不是组织名称,因为macOS和iOS应用程序通常使用Internet域来标识自己。如果未设置域,则从组织名称派生假域。有关详细信息,请参阅下面的平台特定说明。)
QSettings存储设置。每个设置由指定设置名称(键)的QString和存储与键关联的数据的QVariant组成。要编写设置,请使用setValue()。例如:
设置setValue("编辑器/包装边缘",68);
如果已经存在具有相同键的设置,则现有值将被新值覆盖。为了提高效率,更改可能不会立即保存到永久存储中。(可以随时调用sync()来提交更改。)
可以使用value()返回设置的值:
int margin = settings.value("editor/wrapMargin").toInt();
如果没有指定名称的设置,QSettings将返回空QVariant(可以转换为整数0)。可以通过向value()传递第二个参数来指定另一个默认值:
int margin = settings.value("editor/wrapMargin", 80).toInt();
要测试给定键是否存在,请调用contains()。要删除与键关联的设置,请调用remove()。要获取所有键的列表,请调用allKeys()。要删除所有键,请调用clear()。
3. 实现代码Demo
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui- >setupUi(this);
this- >setWindowTitle("用户环境变量管理");
}
Widget::~Widget()
{
delete ui;
}
//打印系统环境变量
void Widget::on_pushButton_print_env_val_clicked()
{
QString env_name=ui- >lineEdit_env_path_name- >text();
if(env_name.isEmpty())return;
//参数解释
//【1】. "HKEY_CURRENT_USEREnvironment": 用户环境变量
//【2】. QSettings::NativeFormat: 使用最适合平台的存储格式存储设置。
QSettings seting("HKEY_CURRENT_USEREnvironment", QSettings::NativeFormat);
//打印用户环境变量path的值。
QString text_val = seting.value(env_name).toString();
ui- >plainTextEdit- >setPlainText(text_val);
}
//设置环境变量的值
void Widget::on_pushButton_set_env_val_clicked()
{
QString env_name=ui- >lineEdit_set_env_name- >text();
if(env_name.isEmpty())return;
QString env_val=ui- >lineEdit_env_add_val- >text();
if(env_val.isEmpty())return;
//参数解释
//【1】. "HKEY_CURRENT_USEREnvironment": 用户环境变量
//【2】. QSettings::NativeFormat: 使用最适合平台的存储格式存储设置。
QSettings seting("HKEY_CURRENT_USEREnvironment", QSettings::NativeFormat);
//获取原环境变量的值
QString text_val = seting.value(env_name).toString();
//遵循windows下环境变量里的路径
env_val = env_val.replace("/", "");
//windows环境变量;作为间隔
text_val.append(";");
//添加用户设置的值
text_val.append(env_val);
//添加新的值
seting.setValue(env_name,text_val);
QMessageBox::about(this,"提示",tr("新值设置成功!"));
}
//清空环境变量
void Widget::on_pushButton_clean_env_clicked()
{
QString env_name=ui- >lineEdit_clean_env_name- >text();
if(env_name.isEmpty())return;
//参数解释
//【1】. "HKEY_CURRENT_USEREnvironment": 用户环境变量
//【2】. QSettings::NativeFormat: 使用最适合平台的存储格式存储设置。
QSettings seting("HKEY_CURRENT_USEREnvironment", QSettings::NativeFormat);
//清空环境变量
seting.setValue(env_name,"");
QMessageBox::about(this,"提示",tr("清空成功!"));
}
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
软件开发
+关注
关注
0文章
614浏览量
27356 -
应用程序
+关注
关注
37文章
3268浏览量
57699 -
Qt
+关注
关注
1文章
302浏览量
37905 -
变量
+关注
关注
0文章
613浏览量
28365
发布评论请先 登录
相关推荐
python环境变量的配置pip
Python环境变量的配置和使用是每个Python开发者都需要了解和掌握的基本技能之一。在本文中,我们将详细介绍如何正确配置Python环境变量,并展示一些常见问题的解决方法。我们将从环境变量
xilinx移植Qt,启动脚本中设置环境变量失败,请问如何解决?
最近在xilinx的板子上移植Qt,用到了官方的ramdisk,所以在文件系统中做出相应的修改不能保存,因此在保存在TF卡下的开机启动脚本init.sh中进行配置Qt的环境变量,开机后
发表于 07-03 09:43
Allegro环境变量
Allegro环境变量:Allegro 是一套功能强大,但相对的也是一套相当复杂的系统,它提供许多的专属环境变量供使用者设定,让使用者可以自订一个专属于自己的Allegro 操作环境,让整个
发表于 08-21 22:43
•0次下载
python设置环境变量
我们想要运行python,需要安装Python,还要设置一些环境变量1,此电脑,右键属性2、高级系统设置-> 环境变量3、在系统变量中找到path,双击它,在分号后面添加python的软件
发表于 11-10 14:49
•890次阅读
嵌入式Linux环境变量分区制作
嵌入式Linux环境变量分区制作嵌入式环境变量分区准备一个存放环境变量的文本文件制作环境变量的工具制作环境变量分区镜像制作嵌入式
发表于 11-02 10:35
•8次下载
ros怎么设置环境变量
可以使用的动态的值,用于影响运行程序的行为。环境变量通常包含一些关键信息,如路径、用户名、颜色选项等。 在ROS中,环境变量是重要的,因为它们用于确定ROS如何运行和找到相关文件和程序。 为什么要设置ROS
Linux环境变量配置方法
Linux上环境变量配置分为设置永久变量和临时变量两种。环境变量设置方法同时要考虑环境Shell类型,不同类型的SHELL设置临时
评论