0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Qt软件开发-QSettings管理用户环境变量(修改、输出)

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2023-07-14 13:46 次阅读

1. 前言

在软件开发中可能有需求修改用户环境变量,添加新的值进行。比如:添加某些可执行文件、某些动态库的路径到系统环境PATH中,能够让可执行文件运行过程中可以找到对应的dll。

在Qt里可以使用QSettings来实现,QSettings类提供一个独立于平台的应用程序设置,Qt已经封装好,修改、读取用户的环境变量不需要管理员权限,并且修改也是直接针对系统的环境配置进行修改,并非当前进程有效(所以修改要谨慎操作)。

image-20220905112808474

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
    Qt
    +关注

    关注

    1

    文章

    302

    浏览量

    37905
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28365
收藏 人收藏

    评论

    相关推荐

    Linux环境变量总结

    Linux是一个多用户的操作系统。多用户意味着每个用户登录系统后,都有自己专用的运行环境。而这个环境是由一组
    发表于 11-14 12:01 385次阅读

    LINUX的环境变量总结

    Linux 是一个多用户的操作系统。多用户意味着每个用户登录系统后,都有自己专用的运行环境。而这个环境是由一组
    发表于 11-21 11:43 443次阅读

    Linux环境变量配置的6种方法

    在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法。
    发表于 12-05 09:25 1453次阅读

    Linux环境变量的配置方法

    在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法。
    发表于 09-27 09:50 363次阅读

    python环境变量的配置pip

    Python环境变量的配置和使用是每个Python开发者都需要了解和掌握的基本技能之一。在本文中,我们将详细介绍如何正确配置Python环境变量,并展示一些常见问题的解决方法。我们将从环境变量
    的头像 发表于 12-15 15:41 2435次阅读

    xilinx移植Qt,启动脚本中设置环境变量失败,请问如何解决?

    最近在xilinx的板子上移植Qt,用到了官方的ramdisk,所以在文件系统中做出相应的修改不能保存,因此在保存在TF卡下的开机启动脚本init.sh中进行配置Qt环境变量,开机后
    发表于 07-03 09:43

    Allegro环境变量

    Allegro环境变量:Allegro 是一套功能强大,但相对的也是一套相当复杂的系统,它提供许多的专属环境变量供使用者设定,让使用者可以自订一个专属于自己的Allegro 操作环境,让整个
    发表于 08-21 22:43 0次下载

    Java环境变量配置

    Java环境变量配置
    发表于 07-24 11:39 0次下载

    python设置环境变量

    我们想要运行python,需要安装Python,还要设置一些环境变量1,此电脑,右键属性2、高级系统设置-> 环境变量3、在系统变量中找到path,双击它,在分号后面添加python的软件
    发表于 11-10 14:49 890次阅读

    嵌入式Linux环境变量分区制作

    嵌入式Linux环境变量分区制作嵌入式环境变量分区准备一个存放环境变量的文本文件制作环境变量的工具制作环境变量分区镜像制作嵌入式
    发表于 11-02 10:35 8次下载
    嵌入式Linux<b class='flag-5'>环境变量</b>分区制作

    高性能计算之Module环境变量管理工具

    Module是一款环境变量管理工具,北鲲云超算平台安装了许多公共软件,通过module实现软件环境变量
    的头像 发表于 11-21 16:57 2964次阅读

    LINUX环境变量总结

    Linux是一个多用户的操作系统。多用户意味着每个用户登录系统后,都有自己专用的运行环境。而这个环境是由一组
    发表于 01-29 10:55 440次阅读

    6种Linux环境变量的配置方法

    在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法。
    的头像 发表于 02-16 10:34 1595次阅读

    ros怎么设置环境变量

    可以使用的动态的值,用于影响运行程序的行为。环境变量通常包含一些关键信息,如路径、用户名、颜色选项等。 在ROS中,环境变量是重要的,因为它们用于确定ROS如何运行和找到相关文件和程序。 为什么要设置ROS
    的头像 发表于 12-28 13:52 2060次阅读

    Linux环境变量配置方法

    Linux上环境变量配置分为设置永久变量和临时变量两种。环境变量设置方法同时要考虑环境Shell类型,不同类型的SHELL设置临时
    的头像 发表于 10-23 13:39 162次阅读