<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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可以修改注冊表,支持存儲自定義數據格式,通??梢员4鎽贸绦蛟O置,保存和恢復應用程序設置。

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

    文章

    570

    瀏覽量

    27199
  • 應用程序
    +關注

    關注

    37

    文章

    3168

    瀏覽量

    56802
  • Qt
    Qt
    +關注

    關注

    1

    文章

    299

    瀏覽量

    37437
  • 變量
    +關注

    關注

    0

    文章

    598

    瀏覽量

    28149
收藏 人收藏

    評論

    相關推薦

    Linux環境變量總結

    Linux是一個多用戶的操作系統。多用戶意味著每個用戶登錄系統后,都有自己專用的運行環境。而這個環境是由一組
    發表于 11-14 12:01 ?303次閱讀

    LINUX的環境變量總結

    Linux 是一個多用戶的操作系統。多用戶意味著每個用戶登錄系統后,都有自己專用的運行環境。而這個環境是由一組
    發表于 11-21 11:43 ?359次閱讀

    Linux環境變量配置的6種方法

    在自定義安裝軟件的時候,經常需要配置環境變量,下面列舉出各種對環境變量的配置方法。
    發表于 12-05 09:25 ?840次閱讀

    Linux環境變量的配置方法

    在自定義安裝軟件的時候,經常需要配置環境變量,下面列舉出各種對環境變量的配置方法。
    發表于 09-27 09:50 ?178次閱讀

    python環境變量的配置pip

    Python環境變量的配置和使用是每個Python開發者都需要了解和掌握的基本技能之一。在本文中,我們將詳細介紹如何正確配置Python環境變量,并展示一些常見問題的解決方法。我們將從環境變量
    的頭像 發表于 12-15 15:41 ?1176次閱讀

    xilinx移植Qt,啟動腳本中設置環境變量失敗,請問如何解決?

    最近在xilinx的板子上移植Qt,用到了官方的ramdisk,所以在文件系統中做出相應的修改不能保存,因此在保存在TF卡下的開機啟動腳本init.sh中進行配置Qt環境變量,開機后
    發表于 07-03 09:43

    迅為龍芯2K1000開發板Linux環境變量

    系統已經把命令的搜索路徑提前設置好了。常用變量 PATH 決定了要去哪個路徑下去尋找我們的程序或者命令, 在以后的開發過程中, 我們要經常修改這個變量。2
    發表于 11-30 12:27

    龍芯2K1000開發板Linux環境變量

    基于:迅為iTOP-2K1000開發板1 環境變量環境變量是系統預設值的參數。 Linux 是一個多用戶的操作系統, 所以每一個用戶也都有自
    發表于 04-28 16:07

    Allegro環境變量

    Allegro環境變量:Allegro 是一套功能強大,但相對的也是一套相當復雜的系統,它提供許多的專屬環境變量供使用者設定,讓使用者可以自訂一個專屬于自己的Allegro 操作環境,讓整個
    發表于 08-21 22:43 ?0次下載

    python設置環境變量

    我們想要運行python,需要安裝Python,還要設置一些環境變量1,此電腦,右鍵屬性2、高級系統設置-> 環境變量3、在系統變量中找到path,雙擊它,在分號后面添加python的軟件
    發表于 11-10 14:49 ?793次閱讀

    嵌入式Linux環境變量分區制作

    嵌入式Linux環境變量分區制作嵌入式環境變量分區準備一個存放環境變量的文本文件制作環境變量的工具制作環境變量分區鏡像制作嵌入式
    發表于 11-02 10:35 ?8次下載
    嵌入式Linux<b class='flag-5'>環境變量</b>分區制作

    高性能計算之Module環境變量管理工具

    Module是一款環境變量管理工具,北鯤云超算平臺安裝了許多公共軟件,通過module實現軟件環境變量
    的頭像 發表于 11-21 16:57 ?2599次閱讀

    LINUX環境變量總結

    Linux是一個多用戶的操作系統。多用戶意味著每個用戶登錄系統后,都有自己專用的運行環境。而這個環境是由一組
    發表于 01-29 10:55 ?322次閱讀

    6種Linux環境變量的配置方法

    在自定義安裝軟件的時候,經常需要配置環境變量,下面列舉出各種對環境變量的配置方法。
    的頭像 發表于 02-16 10:34 ?1380次閱讀

    ros怎么設置環境變量

    可以使用的動態的值,用于影響運行程序的行為。環境變量通常包含一些關鍵信息,如路徑、用戶名、顏色選項等。 在ROS中,環境變量是重要的,因為它們用于確定ROS如何運行和找到相關文件和程序。 為什么要設置ROS
    的頭像 發表于 12-28 13:52 ?902次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>