QT使用QSetting保存程序运行时的一些状态信息到配置文件

参考:https://zhuanlan.zhihu.com/p/351214526

介绍

在产品使用过程中,有些用户有特定的习惯。比如窗口大小是的大小,文件打开的方式等等。

因此我们需要有一个文件来保存用户的一些偏好信息,在程序重新启动的时候再进行偏好设置。

这里用到了QSetting类。

这个类允许你创建一个配置文件或者操作注册表,你还可以指定配置文件的位置,当然,读取也是没问题的。

头文件

#include <QSettings>

使用方式

首先定义一个Qsetting指针确定路径

QString settingPath = QCoreApplication::applicationDirPath() + "/setting.ini";
QSettings *settings = new QSettings(settingPath,QSettings::IniFormat);

然后在一个Group里使用setValue,就可以写入到文件,示例如下

	settings->beginGroup("PortA");
    settings->setValue("COM",ui->comboBox_com->currentText());
    settings->setValue("Baud",ui->comboBox_baud->currentText());
    settings->endGroup();

读文件使用Value,示例如下:

	settings->beginGroup("PortA");
    settings->value("COM").toString()
    settings->endGroup();

记得不管是保存,还是读取,用完后要释放指针

delete settings;

保存到文件例子:

示例:比如在析构函数中写入配置文件

PortA::~PortA()
{

    //保存关闭时的状态
    QString settingPath = QCoreApplication::applicationDirPath() + "/setting.ini";
    QSettings *settings = new QSettings(settingPath,QSettings::IniFormat);
    settings->beginGroup("PortA");
    settings->setValue("COM",ui->comboBox_com->currentText());
    settings->setValue("Baud",ui->comboBox_baud->currentText());
    settings->setValue("Parity",ui->comboBox_parity->currentText());
    settings->setValue("Databit",ui->comboBox_databit->currentText());
    settings->setValue("Stopbit",ui->comboBox_stopbit->currentText());

    settings->setValue("str0",ui->lineEdit_ex0->text());
    settings->setValue("str1",ui->lineEdit_ex1->text());
    settings->setValue("str2",ui->lineEdit_ex2->text());
    settings->setValue("str3",ui->lineEdit_ex3->text());
    settings->setValue("str4",ui->lineEdit_ex4->text());
    settings->setValue("str5",ui->lineEdit_ex5->text());
    settings->setValue("str6",ui->lineEdit_ex6->text());
    settings->setValue("str7",ui->lineEdit_ex7->text());

    settings->setValue("hex_ex0",ui->checkBox_ex0->isChecked());
    settings->setValue("hex_ex1",ui->checkBox_ex1->isChecked());
    settings->setValue("hex_ex2",ui->checkBox_ex2->isChecked());
    settings->setValue("hex_ex3",ui->checkBox_ex3->isChecked());
    settings->setValue("hex_ex4",ui->checkBox_ex4->isChecked());
    settings->setValue("hex_ex5",ui->checkBox_ex5->isChecked());
    settings->setValue("hex_ex6",ui->checkBox_ex6->isChecked());
    settings->setValue("hex_ex7",ui->checkBox_ex7->isChecked());

    settings->setValue("protocol_filename",protocol_filename);

    settings->endGroup();
    delete settings;
    delete ui;
}

读取配置文件示例:

比如在构造函数中读取配置文件:

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


    //读取上次关闭时的状态
    QString settingPath = QCoreApplication::applicationDirPath() + "/setting.ini";
    QSettings *settings = new QSettings(settingPath,QSettings::IniFormat);
    settings->beginGroup("PortA");
    ui->comboBox_com->setCurrentText(settings->value("COM").toString());
    ui->comboBox_baud->setCurrentText(settings->value("Baud").toString());
    ui->comboBox_parity->setCurrentText(settings->value("Parity").toString());
    ui->comboBox_databit->setCurrentText(settings->value("Databit").toString());
    ui->comboBox_stopbit->setCurrentText(settings->value("Stopbit").toString());

    ui->lineEdit_ex0->setText(settings->value("str0").toString());
    ui->lineEdit_ex1->setText(settings->value("str1").toString());
    ui->lineEdit_ex2->setText(settings->value("str2").toString());
    ui->lineEdit_ex3->setText(settings->value("str3").toString());
    ui->lineEdit_ex4->setText(settings->value("str4").toString());
    ui->lineEdit_ex5->setText(settings->value("str5").toString());
    ui->lineEdit_ex6->setText(settings->value("str6").toString());
    ui->lineEdit_ex7->setText(settings->value("str7").toString());

    ui->checkBox_ex0->setChecked(settings->value("hex_ex0").toBool());
    ui->checkBox_ex1->setChecked(settings->value("hex_ex1").toBool());
    ui->checkBox_ex2->setChecked(settings->value("hex_ex2").toBool());
    ui->checkBox_ex3->setChecked(settings->value("hex_ex3").toBool());
    ui->checkBox_ex4->setChecked(settings->value("hex_ex4").toBool());
    ui->checkBox_ex5->setChecked(settings->value("hex_ex5").toBool());
    ui->checkBox_ex6->setChecked(settings->value("hex_ex6").toBool());
    ui->checkBox_ex7->setChecked(settings->value("hex_ex7").toBool());

    settings->endGroup();
    
    delete settings;


}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wow_awsl_qwq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值