(十五)QT利用ini配置文件实现单个工程多个版本功能

在实际项目中,经常会遇到需要存储或者读取配置文件的问题。例如,依靠配置的某个值,你可以打开或者关闭某个功能或者界面显示,这是非常方便的,能让你只需要维护一套代码、几个配置文件,就可以提供不同的项目给不同的客户类型使用

配置的值你可以放在注册表中,但是注册表有一个问题就是:如果你无法读写或者被清除,就会导致项目显示有问题。所以常用的办法就是写入配置文件。QT提供了QSettings类来读写ini文件,即常见的配置文件。

ini文件的定义可以百度查询,它就是一个Windows原来采用的系统配置文件,在目前几乎所有的Windows系统上都支持。主要是包含节、键、值三个,如下:

[Name]
Value=sunatmine
[Block]
SubjectList=Chinese, Maths, English
[Age]
Value=25
[]=

其中Name、Block、Age就是节名字,它们下面的键的名字可以相同或者不同;Value、SubjectList是键的名字,=后面的就是值。节、键的名字可以随便取,但是注意节的名字不能重复,同一个节下的键的名字不能重复,否则只能读取到最开始的值。

下面我们看下ini文件的读、写。QT采用的是QSettings类(其他语言各有各的方式,ini配置文件是一个普适,即使在Linux系统中也可以使用,我接触的PHP语言做网站就支持在Linux系统使用ini配置文件)。

首先让我们创建一个ini文件:
1.新建一个txt文件,重命名option,修改扩展名为ini。(如果你看不到扩展名,请把如下“文件扩展名”勾选上)
在这里插入图片描述
创建好如图所示:
在这里插入图片描述
2.点击打开,写入信息

[IsInside]
Name=ENABLED

接着我们就可以在QT中修改或者读取它了。例如:
我有一个项目,即想给公司内部人员用,又想给外部人员用。内部人员要求他输入工号,外部人员要求他输入用户名,但是我又不想每次发新版本都编译两次项目。就可以使用ini配置文件的方式:
初始是这样的:
在这里插入图片描述
内部员工只想显示工号和密码,外部员工只想显示用户名和密码。那么配置文件中写:

[IsInside]
Name=ENABLED

当值为ENABLED时,说明是内部版本;如果值不是ENABLED或者读取不到值,说明是外部版本。代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QSettings"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //读取配置文件
    QSettings settings("D:\\software\\option.ini",QSettings::IniFormat);
    settings.beginGroup("IsInside");
    QString value = settings.value("Name").toString();
    settings.endGroup();

    if(value == "ENABLED")
    {
        inside();
    }
    else
    {
        outside();
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::inside()
{//内部版本:用户名不显示 工号显示
    ui->label->setVisible(false);
    ui->lineEdit->setVisible(false);
    ui->lineEdit->setText("");

    ui->label_3->setVisible(true);
    ui->lineEdit_3->setVisible(true);
    ui->lineEdit_3->setText("");
}

void MainWindow::outside()
{//外部版本:用户名显示 工号不显示
    ui->label->setVisible(true);
    ui->lineEdit->setVisible(true);
    ui->lineEdit->setText("");

    ui->label_3->setVisible(false);
    ui->lineEdit_3->setVisible(false);
    ui->lineEdit_3->setText("");
}

根据配置文件显示如下:
在这里插入图片描述在这里插入图片描述
这样你就可以不用维护两套代码了,并且工程只需要编译一次,根据配置文件的不同,可以变成任意你需要的版本。

QSettings不仅可以读取QString类型,还可以读取为各种类型、甚至list列表,具体的可以根据实际需求来操作:

    QString value = settings.value("Name").toString();//QString
    int value1 = settings.value("Name").toInt();//int
    QStringList value2 = settings.value("Name").toStringList();//list
    bool value3 = settings.value("Name").toBool();//bool

写入配置文件也很简单的:

    //写入配置文件
    QSettings settings1("D:\\software\\option.ini",QSettings::IniFormat);
    settings.beginGroup("Info");
    settings.setValue("Name","sunatmine");
    settings.setValue("Age",40);
    settings.endGroup();
    settings.sync();

结果如下:
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值