配置属性文件QSetting使用

用户通常希望应用程序记住它的设置(窗口大小和位置,选项等)。跨会话。这些信息通常存储在Windows的系统注册表中,以及macOS和iOS的属性列表文件中。在Unix系统上,由于缺乏标准,许多应用程序(包括KDE应用程序)使用INI文本文件、

QSettings存储设置。每个设置都由一个指定设置名称()的QString和一个存储与键关联的数据的QVariant组成。要编写设置,请使用setValue()。举例来说:

settings.setValue("editor/wrapMargin", 68);

如果已经存在具有相同键的设置,则现有值将被新值覆盖。为了提高效率,可能不会立即将更改保存到永久存储。(You可以随时调用sync()来提交更改。

您可以使用value()来获取设置的值:

int margin = settings.value("editor/wrapMargin").toInt();

如果没有指定名称的设置,QSettings将返回空QVariant(可以转换为整数0)。可以通过向value()传递第二个参数来指定另一个默认值:

int margin = settings.value("editor/wrapMargin", 80).toInt();

QSettings提供了静态函数对配置进行读取和设置。

使用vaule读取,value第二个参数可用来指定默认值:

QSettings("config.ini", QSettings::IniFormat).value("baudrate", 9600).toString();



使用setValue设置:

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    ui->comboBox->setEditable(true);
    ui->comboBox->addItems({"9600", "115200"});
    ui->comboBox_2->addItems({"8", "7"});
    ui->comboBox_3->addItems({"1", "2"});
    ui->comboBox_4->addItems({tr("无校验"), tr("奇校验"), tr("偶校验")});
}

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

void MainWindow::showEvent(QShowEvent *e)
{
    QWidget::showEvent(e);

    ui->comboBox->setCurrentText(QSettings("config.ini", QSettings::IniFormat).value("baudrate", 9600).toString());
    ui->comboBox_2->setCurrentIndex(QSettings("config.ini", QSettings::IniFormat).value("databits", 0).toInt());
    ui->comboBox_3->setCurrentIndex(QSettings("config.ini", QSettings::IniFormat).value("stopbits", 0).toInt());
    ui->comboBox_4->setCurrentIndex(QSettings("config.ini", QSettings::IniFormat).value("parity", 0).toInt());

    // 恢复上次关闭软件时的窗口大小
    QSettings settings("config.ini", QSettings::IniFormat);
    settings.beginGroup("mainwindow");
    resize(settings.value("size").toSize());
    move(settings.value("pos", pos()).toPoint());
    settings.endGroup();
}

void MainWindow::closeEvent(QCloseEvent *e)
{
    QSettings("config.ini", QSettings::IniFormat).setValue("baudrate", ui->comboBox->currentText());
    QSettings("config.ini", QSettings::IniFormat).setValue("databits", ui->comboBox_2->currentIndex());
    QSettings("config.ini", QSettings::IniFormat).setValue("stopbits", ui->comboBox_3->currentIndex());
    QSettings("config.ini", QSettings::IniFormat).setValue("parity", ui->comboBox_4->currentIndex());

    // 记录软件关闭前的窗口大小和位置
    QSettings settings("config.ini", QSettings::IniFormat);
    settings.beginGroup("mainwindow");
    settings.setValue("size", size());
    settings.setValue("pos", pos());
    settings.endGroup();

    QWidget::closeEvent(e);
}


 

你可能感兴趣的:(QT,学习)