QSettings读写ini文件

QSettings简介

QSettings类提供了持久的独立于平台的应用程序设置。
用户通常希望应用程序能够跨会话记住它的设置(窗口大小和位置,选项等)。在Windows上,这些信息通常存储在系统注册表中,在macOS和iOS上则存储在属性列表文件中。在Unix系统中,在没有标准的情况下,许多应用程序(包括KDE应用程序)使用INI文本文件。
QSettings是围绕这些技术的抽象,使您能够以可移植的方式保存和恢复应用程序设置。它还支持自定义存储格式。
QSettings的API基于QVariant,允许您以最小的努力保存大多数基于值的类型,如QString, QRect和QImage。
如果您所需要的只是一个基于非持久内存的结构,则考虑使用QMap<QString, QVariant>。

常用Api

构造一个QSettings对象,用于访问存储在名为fileName的文件中的设置,带有父元素。如果文件还不存在,则创建它。如果format为QSettings::NativeFormat, fileName的含义取决于平台。在Unix上,fileName是一个INI文件的名称。在macOS和iOS上,fileName是一个.plist文件的名称。在Windows上,fileName是系统注册表中的一个路径。
如果format为QSettings::IniFormat,则fileName为INI文件的名称。

QSettings::QSettings(const QString &fileName, QSettings::Format format, QObject *parent = nullptr)

向当前组追加前缀。也可理解为开始一个节或者键值对组。

void QSettings::beginGroup(const QString &prefix)

与QSettings::beginGroup配合使用。

void QSettings::endGroup()

将设置键的值设置为value。如果该键已经存在,则覆盖之前的值。

void QSettings::setValue(const QString &key, const QVariant &value)

返回设置键的值。如果该设置不存在,则返回defaultValue。
如果没有指定默认值,则返回默认QVariant。

QVariant QSettings::value(const QString &key, const QVariant &defaultValue = QVariant()) const

如果存在一个名为key的设置,则返回true;否则返回false。

bool QSettings::包含(const QString &key) const

在这里插入图片描述
ini文件
在这里插入图片描述
.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
    
    
class Widget;
}

class Widget : public QWidget
{
    
    
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    void readIni();
    void writeIni();
protected:
     void closeEvent(QCloseEvent *event) override;

private slots:
     void on_btnSetColor_clicked();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

.cpp问价

#include "widget.h"
#include "ui_widget.h"
#include<QSettings>
#include<QCloseEvent>
#include<QColorDialog>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    
    
    ui->setupUi(this);

    readIni();

}

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

void Widget::readIni()
{
    
    
    QSettings settings("GuiState.ini",QSettings::IniFormat);

    settings.beginGroup("MainWindow");
    resize(settings.value("size", QSize(400, 400)).toSize());
    move(settings.value("pos", QPoint(200, 200)).toPoint());

    //设置背景
    QPalette pal(this->palette());
    pal.setColor(QPalette::Background, settings.value("color", QColor(255,255,255)).value<QColor>());
    this->setAutoFillBackground(true);
    this->setPalette(pal);

    settings.endGroup();
}

void Widget::writeIni()
{
    
    
    QSettings settings("GuiState.ini",QSettings::IniFormat);

    settings.beginGroup("MainWindow");
    settings.setValue("size", size());
    settings.setValue("pos", pos());
    settings.endGroup();
}

void Widget::closeEvent(QCloseEvent *event)
{
    
    
    writeIni();
}

void Widget::on_btnSetColor_clicked()
{
    
    
    QColorDialog colorDialog;
    connect(&colorDialog, &QColorDialog::colorSelected, this, [&](QColor curColor){
    
    

        QSettings settings("GuiState.ini",QSettings::IniFormat);
        settings.beginGroup("MainWindow");
        settings.setValue("color", curColor);
        settings.endGroup();

        //设置背景
        QPalette pal(this->palette());
        pal.setColor(QPalette::Background, curColor);
        this->setAutoFillBackground(true);
        this->setPalette(pal);

    });
    colorDialog.exec();

}

猜你喜欢

转载自blog.csdn.net/weixin_44901043/article/details/124270126