티스토리 뷰
QSettings 클래스는 QObject를 상속하는 기반 클래스로 사용자가 편리하게 다양한 설정을 저장하고 읽을 수 있도록 돕는다. 운영체제나 옵션에 따라 정보의 저장 위치가 달라질 수 있다.
참조 링크 : https://doc.qt.io/qt-5/qsettings.html
위의 그림은 응용 프로그램의 다양한 설정을 INI 파일 형식의 파일에 저장하고 있는 모습이다. 통상 섹션으로 나누어 다양한 정보를 저장하고 읽는데, QSettings 클래스는 이 과정을 편리하고 수행할 수 있도록 돕는다. 값의 설정과 읽기에 QVariant 클래스를 사용하므로 다양한 오브젝트를 부담 없이 저장하고 읽을 수 있다.
QSettings settings(((QApplication::applicationDirPath()) + "/" + m_MainWindow->PROJECT_NAME +".ini"), QSettings::IniFormat);
settings.beginGroup("INTERFACE");
settings.setValue("ToolBarMain", Pref_checkBox_ToolBarMain->isChecked());
settings.setValue("Commands", Pref_checkBox_Commands->isChecked());
settings.setValue("SplitMode", QString::number(Pref_comboBox_SplitMode->currentIndex()));
settings.setValue("MainWindowSize", m_MainWindow->size());
settings.setValue("MainWindowPos", m_MainWindow->pos());
settings.setValue("CommandsSize", QSize(r.height(), r.width()));
settings.setValue("CommandsPos", QPoint(r.x(), r.y()));
settings.endGroup();
settings.beginGroup("RECENT-FILES");
settings.remove("");
settings.setValue("Files", QString::number(m_PageCtrl->recentFiles.count()));
for (int i = 0; i < m_PageCtrl->recentFiles.count() ; i++)
settings.setValue(("File" + QString::number(i)), m_PageCtrl->recentFiles[i]);
settings.endGroup();
위의 코드는 INI 파일 형태로 설정 파일을 저장하고 있는 예제로 다양한 데이터 오브젝트를 setValue로 저장하도록 요구하면 QSettings 클래스가 알아서 저장해 준다. 연관 함수들은 다음과 같다.
QSettings(QString &fileName, QSettings::Format format)
QSettings(QSettings::Format format, QSettings::Scope scope, QString &organization) : 클래스 생성자
여러 형태의 QSettings 클래스 생성자가 있지만 파일 형태를 지정하는 생성자는 위의 두 가지다.
범위(scope)는 QSettings::UserScope, QSettings::SystemScope를 지정할 수 있고,
형식은 QSettings::NativeFormat, IniFormat 등으로 지정할 수 있다.
NativeFormat은 윈도우는 레지스트리, 맥은 CFPreferences, 리눅스/유닉스는 INI 파일로 저장한다.
QString group()
void beginGroup(const QString &prefix)
void endGroup() : 그룹(섹션) 조회 및 시작/닫기. 그룹은 계층적으로 구성할 수 있다.
그룹을 닫지 않고 다시 그룹을 시작하면 현재 그룹에 하위 새 그룹을 시작한다는 의미이다.
QStringList childGroups()
QStringList allKeys()
QStringList childKeys() : 그룹 및 키 조회. 그룹 안으로 들어간 상태에서는 해당 그룹을 범위로 조회한다.
void clear()
void remove(const QString &key) : 전체 삭제 및 키 삭제. 현재 그룹의 모든 키 삭제는 remove("")로 수행
void setValue(const QString &key, const QVariant &value) : 지정한 키값 설정
윈도우와 리눅스는 키의 대소문자를 동일하게 처리하지만 맥은 다르게 처리한다.
QFile file(((QApplication::applicationDirPath()) + "/" + m_MainWindow->PROJECT_NAME +".ini"));
if (!file.exists()) pref_ok = false; else pref_ok = true;
QSettings settings(((QApplication::applicationDirPath()) + "/" + m_MainWindow->PROJECT_NAME +".ini"), QSettings::IniFormat);
settings.beginGroup("INTERFACE");
Pref_checkBox_ToolBarMain->setChecked(settings.value("ToolBarMain", true).toBool());
m_MainWindow->updateMainToolBarVisible(Pref_checkBox_ToolBarMain->isChecked());
Pref_checkBox_Commands->setChecked(settings.value("Commands", true).toBool());
Pref_comboBox_SplitMode->setCurrentIndex(settings.value("SplitMode", 1).toInt());
m_MainWindow->resize(settings.value("MainWindowSize", QSize(480, 320)).toSize());
m_MainWindow->move(settings.value("MainWindowPos", QPoint(0, 45)).toPoint());
settings.endGroup();
위의 코드는 설정 파일을 읽는 예제로 QVariant 클래스를 사용하므로 원래의 값 형태로 사용하려면 값을 조회한 다음에 toBool(), toInt() 등과 같은 함수를 사용하고 있음을 주목할 필요가 있다. 기타 함수들은 다음과 같다.
QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) : 값 조회.
리턴이 QVariant 임에 주의. 지정한 키에 해당하는 값이 없으면 지정한 기본값을 리턴한다.
void sync() : 실제 파일에 저장하지 않은 값이 있다면 파일에 저장하고, 파일이 바뀌었다면 메모리로 다시 로드한다.
'C | C++' 카테고리의 다른 글
QPainter 클래스(QT C++) (0) | 2024.03.24 |
---|---|
QVariant 클래스(QT C++) (0) | 2024.03.19 |
QGraphicsItem 클래스(QT C++) (0) | 2024.03.14 |
QGraphicsScene 클래스(QT C++) (0) | 2024.03.13 |
QGraphicsView 클래스(QT C++) (0) | 2024.03.13 |