QSettings를 활용하여 설정하고자 하는 데이터를 ini 타입으로 저장 및 불러오는 방법

 

1. 설정 정보 저장  

1.1 설정 저장하기

설정파일 위치와 포맷을 지정한다.

QSettings settings(configFile(), QSettings::IniFormat);

함수 configFile() 은 설정파일의 위치를 QString 형태로 반환함

파일명: config.ini

 

bool testBool = true;
        int testInt = 10;
        QString testQString = "TestString";

        settings.setValue("TEST/bool", testBool);
        settings.setValue("TEST/int", testInt);
        settings.setValue("TEST/QString", testQString);

위와 같이 작성한 경우 저장되는 형태는 다음과 같다.

 

 

 

 

 

[TEST] 아래 bool, int, QString 정보가 저장된 것을 확인 할 수 있다.

 

 

또한 아래와 같은 형식으로도 작성 가능하다.

settings.setValue("TEST1/bool", testBool);
        settings.setValue("TEST2/int", testInt);
        settings.setValue("TEST3/QString", testQString);

 

 

2. 설정 불러오기

2.1 저장된 설정 불러오기

QSettings settings(configFile(), QSettings::IniFormat);

설정값을 저장할 때와 마찬가지로 설정파일의 위치와 포맷을 지정한다.

 

저장된 값을 불러오는 형태는 다음과 같다.

        settings.value("TEST/bool").toBool();
        settings.value("TEST/int").toInt();
        settings.value("TEST/QString").toString();

 

3. 예제
qsettingsTest.pro
QT += core gui

    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

    TARGET = qsettingsTest
    TEMPLATE = app

    SOURCES += main.cpp\
    mainwindow.cpp

    HEADERS += mainwindow.h

    FORMS += mainwindow.ui
mainwindow.h
#ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>

    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
    Q_OBJECT

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

    private:
        Ui::MainWindow *ui;

    private:
        void makeConfigFile();
        QString configFile();
        void loadConfigFile();

    private slots:
        void on_saveButton_clicked();
        void on_loadButton_clicked();
    };

    #endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
    #include "ui_mainwindow.h"

    #include <QSettings>
    #include <QDesktopServices>
    #include <QFile>

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

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

    void MainWindow::makeConfigFile()
    {
        if (QFile::exists(configFile())) return;

        bool testBool = true;
        int testInt = 10;
        QString testQString = "TestString";

        QSettings settings(configFile(), QSettings::IniFormat);
        settings.setValue("TEST1/bool", testBool);
        settings.setValue("TEST2/int", testInt);
        settings.setValue("TEST3/QString", testQString);
    }

    QString MainWindow::configFile()
    {
        QString retn;

    #if QT_VERSION >= 0x050000
        QString configBasePath =
        QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).at(0) +
            "/" + qApp->applicationName();
    #else
        QString configBasePath =
        QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation) +
            "/" + qApp->applicationName();
    #endif

        retn = configBasePath + "/config.ini";

        return retn;
    }

    void MainWindow::loadConfigFile()
    {
        if (!QFile::exists(configFile())) return;

        QSettings settings(configFile(), QSettings::IniFormat);

        bool testBool = settings.value("TEST/bool").toBool();
        int testInt = settings.value("TEST/int").toInt();
        QString testQString = settings.value("TEST/QString").toString();

        ui->checkBox->setChecked(testBool);
        ui->horizontalSlider->setValue(testInt);
        ui->hSliderValue->setText(QString::number(testInt));
        ui->lineEdit->setText(testQString);
    }

    void MainWindow::on_saveButton_clicked()
    {
        QSettings settings(configFile(), QSettings::IniFormat);

        bool testBool = ui->checkBox->isChecked();
        int testInt = ui->horizontalSlider->value();
        QString testQString = ui->lineEdit->text();

        settings.setValue("TEST/bool", testBool);
        settings.setValue("TEST/int", testInt);
        settings.setValue("TEST/QString", testQString);
        settings.sync();
    }

    void MainWindow::on_loadButton_clicked()
    {
        loadConfigFile();
    }
main.cpp
#include "mainwindow.h"
    #include <QApplication>

    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();

        return a.exec();
    }