QSettings Class
QSettings 클래스는 플랫폼에 구애받지 않는 영구적인 애플리케이션 설정을 제공합니다. 더 보기...
| 헤더: | #include <QSettings> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 상속: | QObject |
- 상속된 멤버를 포함한 모든 멤버 목록
- QSettings는 입출력 및 네트워킹의 일부입니다.
참고: 이 클래스의 모든 함수는 재진입 가능합니다.
참고: 다음 함수들은 스레드 안전합니다:
- registerFormat(const QString &extension, QSettings::ReadFunc readFunc, QSettings::WriteFunc writeFunc, Qt::CaseSensitivity caseSensitivity)
공개 유형
| enum | Format { NativeFormat, Registry32Format, Registry64Format, IniFormat, WebLocalStorageFormat, …, InvalidFormat } |
| ReadFunc | |
| enum | Scope { UserScope, SystemScope } |
| SettingsMap | |
| enum | Status { NoError, AccessError, FormatError } |
| WriteFunc |
공개 함수
| QSettings(QObject *parent = nullptr) | |
| QSettings(QSettings::Scope scope, QObject *parent = nullptr) | |
| QSettings(const QString &fileName, QSettings::Format format, QObject *parent = nullptr) | |
| QSettings(const QString &organization, const QString &application = QString(), QObject *parent = nullptr) | |
| QSettings(QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = nullptr) | |
| QSettings(QSettings::Format format, QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = nullptr) | |
| virtual | ~QSettings() |
| QStringList | allKeys() const |
| QString | applicationName() const |
| void | beginGroup(QAnyStringView prefix) |
| int | beginReadArray(QAnyStringView prefix) |
| void | beginWriteArray(QAnyStringView prefix, int size = -1) |
| QStringList | childGroups() const |
| QStringList | childKeys() const |
| void | clear() |
| bool | contains(QAnyStringView key) const |
| void | endArray() |
| void | endGroup() |
| bool | fallbacksEnabled() const |
| QString | fileName() const |
| QSettings::Format | format() const |
| QString | group() const |
| bool | isAtomicSyncRequired() const |
| bool | isWritable() const |
| QString | organizationName() const |
| void | remove(QAnyStringView key) |
| QSettings::Scope | scope() const |
| void | setArrayIndex(int i) |
| void | setAtomicSyncRequired(bool enable) |
| void | setFallbacksEnabled(bool b) |
| void | setValue(QAnyStringView key, const QVariant &value) |
| QSettings::Status | status() const |
| void | sync() |
| QVariant | value(QAnyStringView key) const |
| QVariant | value(QAnyStringView key, const QVariant &defaultValue) const |
정적 공용 멤버
| QSettings::Format | defaultFormat() |
| QSettings::Format | registerFormat(const QString &extension, QSettings::ReadFunc readFunc, QSettings::WriteFunc writeFunc, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive) |
| void | setDefaultFormat(QSettings::Format format) |
| void | setPath(QSettings::Format format, QSettings::Scope scope, const QString &path) |
재구현된 보호 함수
| virtual bool | event(QEvent *event) override |
상세 설명
사용자는 일반적으로 애플리케이션이 세션 간에 설정(창 크기 및 위치, 옵션 등)을 기억하기를 기대합니다. 이 정보는 Windows에서는 시스템 레지스트리에, macOS 및 iOS에서는 속성 목록 파일에 저장되는 경우가 많습니다. Unix 시스템의 경우 표준이 없기 때문에 많은 애플리케이션(KDE 애플리케이션 포함)이 INI 텍스트 파일을 사용합니다.
QSettings는 이러한 기술들을 추상화한 것으로, 애플리케이션 설정을 이식성 있게 저장하고 복원할 수 있게 해줍니다. 또한 custom storage formats 도 지원합니다.
QSettings의 API는 QVariant 를 기반으로 하여, QString, QRect, QImage 과 같은 대부분의 값 기반 유형을 최소한의 노력으로 저장할 수 있게 해줍니다.
단순히 비영구적인 메모리 기반 구조체만 필요한 경우에는 QMap<QString, QVariant>를 사용하는 것을 고려해 보십시오.
기본 사용법
QSettings 객체를 생성할 때는 애플리케이션 이름뿐만 아니라 회사나 조직의 이름도 함께 전달해야 합니다. 예를 들어, 제품 이름이 Star Runner이고 회사 이름이 MySoft인 경우, QSettings 객체는 다음과 같이 생성합니다:
QSettings settings("MySoft", "Star Runner");QSettings 객체는 스택이나 힙(즉, ` new`를 사용하여)에서 생성할 수 있습니다. QSettings 객체의 생성 및 소멸은 매우 빠르게 이루어집니다.
애플리케이션의 여러 곳에서 QSettings를 사용하는 경우, QCoreApplication::setOrganizationName() 및 QCoreApplication::setApplicationName()를 사용하여 조직명과 애플리케이션 이름을 지정한 다음, 기본 QSettings 생성자를 사용하는 것이 좋습니다:
QCoreApplication::setOrganizationName("MySoft");
QCoreApplication::setOrganizationDomain("mysoft.com");
QCoreApplication::setApplicationName("Star Runner");
...
QSettings settings;(여기서는 조직의 인터넷 도메인도 함께 지정합니다. 인터넷 도메인이 설정되면 macOS 및 iOS에서는 조직 이름 대신 이 도메인이 사용됩니다. 이는 macOS 및 iOS 애플리케이션이 관례적으로 인터넷 도메인을 사용하여 자신을 식별하기 때문입니다. 도메인이 설정되지 않은 경우, 조직 이름에서 파생된 가상의 도메인이 사용됩니다. 자세한 내용은 아래의 ` Platform-Specific Notes `을 참조하십시오.)
QSettings는 설정을 저장합니다. 각 설정은 설정의 이름( 키)을 지정하는 키-값 쌍( QString )과 키와 관련된 데이터를 저장하는 값( QVariant )으로 구성됩니다. 설정을 작성하려면 ` setValue()`를 사용합니다. 예를 들면 다음과 같습니다:
settings.setValue("editor/wrapMargin", 68);동일한 키를 가진 설정이 이미 존재하는 경우, 기존 값은 새 값으로 덮어쓰게 됩니다. 효율성을 위해 변경 사항이 즉시 영구 저장소에 저장되지 않을 수 있습니다. (언제든지 sync()를 호출하여 변경 사항을 반영할 수 있습니다.)
value()를 사용하여 설정값을 가져올 수 있습니다:
int margin = settings.value("editor/wrapMargin").toInt();지정된 이름의 설정이 없는 경우, QSettings는 null 값의 QVariant 를 반환합니다(이는 정수 0으로 변환할 수 있습니다). value()에 두 번째 인수를 전달하여 다른 기본값을 지정할 수 있습니다:
int margin = settings.value("editor/wrapMargin", 80).toInt();주어진 키가 존재하는지 확인하려면 contains()를 호출하십시오. 키와 연관된 설정을 제거하려면 remove()를 호출하십시오. 모든 키의 목록을 얻으려면 allKeys()를 호출하십시오. 모든 키를 제거하려면 clear()를 호출하십시오.
QVariant 및 GUI 유형
QVariant 는 Qt Core 모듈의 일부이므로, Qt GUI 에 속하는 QColor, QImage, QPixmap 와 같은 데이터 유형에 대한 변환 함수를 제공할 수 없습니다. 즉, QVariant 에는 toColor(), toImage() 또는 toPixmap() 함수가 없습니다.
대신 QVariant::value() 템플릿 함수를 사용할 수 있습니다. 예를 들면 다음과 같습니다:
QSettings settings("MySoft", "Star Runner");
QColor color = settings.value("DataPump/bgcolor").value<QColor>();역 변환(예: ` QColor `에서 ` QVariant`로)은 ` QVariant`에서 지원하는 모든 데이터 유형(GUI 관련 유형 포함)에 대해 자동으로 수행됩니다:
QSettings settings("MySoft", "Star Runner");
QColor color = QColor(Qt::blue);
settings.setValue("DataPump/bgcolor", color);qRegisterMetaType()를 사용하여 등록된 사용자 정의 유형 중 QDataStream 로 데이터를 스트리밍하거나 에서 데이터를 가져오는 연산자를 가진 유형은 QSettings를 사용하여 저장할 수 있습니다.
섹션 및 키 구문
설정 키에는 모든 유니코드 문자를 포함할 수 있습니다. 대소문자 구분이 적용되는지 여부는 파일 형식과 운영 체제에 따라 결정됩니다. Windows에서는 레지스트리와 INI 파일이 대소문자를 구분하지 않는 키를 사용하는 반면, registerFormat()로 등록된 사용자 지정 형식은 대소문자를 구분하거나 구분하지 않을 수 있습니다. Unix 시스템에서는 키가 항상 대소문자를 구분합니다.
이식성 문제를 방지하려면 다음의 간단한 규칙을 따르십시오:
- 항상 동일한 대소문자 표기법을 사용하여 같은 키를 참조하십시오. 예를 들어, 코드 내 한 곳에서 키를 "text fonts"로 참조했다면, 다른 곳에서는 "Text Fonts"로 참조하지 마십시오.
- 대소문자만 다를 뿐 동일한 키 이름은 피하십시오. 예를 들어, "MainWindow"라는 키가 있다면 다른 키를 "mainwindow"로 저장하려고 시도하지 마십시오.
- 섹션이나 키 이름에 슬래시('/' 및 '\')를 사용하지 마십시오. 백슬래시 문자는 하위 키를 구분하는 데 사용됩니다(아래 참조). Windows에서 '\'는 QSettings에 의해 '/'로 변환되므로, 두 기호는 동일하게 처리됩니다.
유닉스 파일 경로와 마찬가지로 '/' 문자를 구분자로 사용하여 계층적 키를 구성할 수 있습니다. 예를 들어:
settings.setValue("mainwindow/size", win->size());
settings.setValue("mainwindow/fullScreen", win->isFullScreen());
settings.setValue("outputpanel/visible", panel->isVisible());동일한 접두사를 가진 여러 설정을 저장하거나 복원하려면, ` beginGroup()`를 사용하여 접두사를 지정하고 마지막에 ` endGroup()`를 호출할 수 있습니다. 다음은 동일한 예시이지만, 이번에는 그룹 메커니즘을 사용한 경우입니다:
settings.beginGroup("mainwindow");
settings.setValue("size", win->size());
settings.setValue("fullScreen", win->isFullScreen());
settings.endGroup();
settings.beginGroup("outputpanel");
settings.setValue("visible", panel->isVisible());
settings.endGroup();beginGroup()를 사용하여 그룹을 설정하면, 대부분의 함수 동작이 그에 따라 달라집니다. 그룹은 재귀적으로 설정할 수 있습니다.
그룹 외에도 QSettings는 “배열” 개념도 지원합니다. 자세한 내용은 beginReadArray() 및 beginWriteArray()을 참조하십시오.
폴백 메커니즘
조직 이름을 MySoft, 애플리케이션 이름을 Star Runner로 설정하여 QSettings 객체를 생성했다고 가정해 봅시다. 값을 조회할 때, 다음 순서대로 최대 네 곳의 위치가 검색됩니다:
- Star Runner 애플리케이션의 사용자별 위치
- MySoft에서 개발한 모든 애플리케이션에 대한 사용자별 위치
- Star Runner 애플리케이션의 시스템 전체 위치
- MySoft에서 개발한 모든 애플리케이션에 대한 시스템 전체 위치
(Qt가 지원하는 다양한 플랫폼에서 이러한 위치가 어디인지에 대한 정보는 아래의 Platform-Specific Notes 를 참조하십시오.)
첫 번째 위치에서 키를 찾을 수 없는 경우, 검색은 두 번째 위치로 이어지며, 이 과정이 반복됩니다. 이를 통해 시스템 전체 또는 조직 전체의 설정을 저장하고, 사용자별 또는 애플리케이션별로 해당 설정을 재정의할 수 있습니다. 이 메커니즘을 비활성화하려면 setFallbacksEnabled(false)를 호출하십시오.
네 곳의 위치에 있는 키는 모두 읽기 가능하지만, 쓰기 작업은 첫 번째 파일(해당 애플리케이션의 사용자별 위치)에서만 가능합니다. 다른 파일에 쓰기를 하려면 애플리케이션 이름을 생략하거나 QSettings::SystemScope 를 지정하십시오(기본값인 QSettings::UserScope 와는 대조적으로).
예를 들어 살펴보겠습니다:
QSettings obj1("MySoft", "Star Runner");
QSettings obj2("MySoft");
QSettings obj3(QSettings::SystemScope, "MySoft", "Star Runner");
QSettings obj4(QSettings::SystemScope, "MySoft");아래 표는 어떤 QSettings 객체가 어떤 위치에 접근하는지를 요약한 것입니다. "X"는 해당 위치가 QSettings 객체와 연결된 기본 위치이며 읽기 및 쓰기 모두에 사용됨을 의미하고, "o"는 해당 위치가 읽기 시 대체 위치로 사용됨을 의미합니다.
| 위치 | obj1 | obj2 | obj3 | obj4 |
|---|---|---|---|---|
| 1. 사용자, 애플리케이션 | X | |||
| 2. 사용자, 조직 | o | X | ||
| 3. 시스템, 애플리케이션 | o | X | ||
| 4. 시스템, 조직 | o | o | o | X |
이 메커니즘의 장점은 Qt가 지원하는 모든 플랫폼에서 작동하며, 파일 이름이나 레지스트리 경로를 명시할 필요 없이도 여전히 높은 유연성을 제공한다는 점입니다.
네이티브 API 대신 모든 플랫폼에서 INI 파일을 사용하려면, QSettings 생성자의 첫 번째 인자로 QSettings::IniFormat 를 전달하고, 그 뒤에 범위, 조직 이름, 애플리케이션 이름을 순서대로 지정하면 됩니다:
INI 파일은 숫자 데이터와 이를 인코딩하는 데 사용되는 문자열 간의 구분을 잃어버리므로, 숫자로 기록된 값은 ` QString`로 다시 읽히게 됩니다. 숫자 값은 ` QString::toInt()`, ` QString::toDouble()` 및 관련 함수를 사용하여 복원할 수 있습니다.
GUI 애플리케이션 상태 복원
QSettings는 GUI 애플리케이션의 상태를 저장하는 데 자주 사용됩니다. 다음 예제는 QSettings를 사용하여 애플리케이션 메인 창의 기하학적 정보를 저장하고 복원하는 방법을 보여줍니다.
void MainWindow::writeSettings()
{
QSettings settings("Moose Soft", "Clipper");
settings.beginGroup("MainWindow");
settings.setValue("geometry", saveGeometry());
settings.endGroup();
}
void MainWindow::readSettings()
{
QSettings settings("Moose Soft", "Clipper");
settings.beginGroup("MainWindow");
const auto geometry = settings.value("geometry", QByteArray()).toByteArray();
if (geometry.isEmpty())
setGeometry(200, 200, 400, 400);
else
restoreGeometry(geometry);
settings.endGroup();
}창의 기하학적 구조를 복원할 때 QWidget::setGeometry() 대신 QWidget::resize() 및 QWidget::move()를 호출하는 것이 더 좋은 이유에 대한 설명은 창 기하학적 구조(Window Geometry)를 참조하십시오.
readSettings() 및 writeSettings() 함수는 다음과 같이 메인 창의 생성자 및 닫기 이벤트 핸들러에서 호출해야 합니다:
MainWindow::MainWindow()
{
...
readSettings();
}
void MainWindow::closeEvent(QCloseEvent *event)
{
if (userReallyWantsToQuit()) {
writeSettings();
event->accept();
} else {
event->ignore();
}
}여러 스레드 또는 프로세스에서 동시에 설정에 액세스하기
QSettings는 재진입 가능합니다. 즉, 서로 다른 스레드에서 서로 다른 QSettings 객체를 동시에 사용할 수 있습니다. 이 보장은 QSettings 객체가 디스크상의 동일한 파일(또는 시스템 레지스트리의 동일한 항목)을 참조하는 경우에도 유효합니다. 한 QSettings 객체를 통해 설정이 수정되면, 동일한 위치에서 작동하며 동일한 프로세스에 속한 다른 모든 QSettings 객체에서도 해당 변경 사항이 즉시 반영됩니다.
QSettings는 특정 조건이 충족되는 경우, 서로 다른 프로세스(동시에 실행 중인 애플리케이션의 서로 다른 인스턴스이거나 완전히 다른 애플리케이션일 수 있음)에서 동일한 시스템 위치를 읽고 쓰기 위해 안전하게 사용할 수 있습니다. QSettings::IniFormat 의 경우, 데이터 무결성을 보장하기 위해 자문형 파일 잠금 및 스마트 병합 알고리즘을 사용합니다. 이 기능이 작동하기 위한 조건은 쓰기 가능한 구성 파일이 일반 파일이어야 하고, 현재 사용자가 새로운 임시 파일을 생성할 수 있는 디렉터리에 위치해야 한다는 것입니다. 그렇지 않은 경우, setAtomicSyncRequired()를 사용하여 안전 모드를 해제해야 합니다.
sync()는 (이 QSettings의 변경 사항을 기록하는 것 외에도) 다른 프로세스에서 수행한 변경 사항을 가져온다는 점에 유의하십시오.
플랫폼별 참고 사항
애플리케이션 설정이 저장되는 위치
Fallback Mechanism 섹션에서 언급한 바와 같이, QSettings는 설정이 사용자별인지 시스템 전체인지, 그리고 애플리케이션별인지 조직 전체인지에 따라 최대 네 곳의 위치에 애플리케이션 설정을 저장합니다. 설명을 단순화하기 위해, 조직 이름을 MySoft, 애플리케이션 이름을 Star Runner라고 가정하겠습니다.
유닉스 시스템에서 파일 형식이 NativeFormat 인 경우, 기본적으로 다음 파일들이 사용됩니다:
$HOME/.config/MySoft/Star Runner.conf$HOME/.config/MySoft.conf- $XDG_CONFIG_DIRS에 포함된 각 디렉터리 <dir>에 대해:
<dir>/MySoft/Star Runner.conf - $XDG_CONFIG_DIRS에 포함된 각 디렉터리 <dir>에 대해:
<dir>/MySoft.conf
참고: XDG_CONFIG_DIRS가 설정되지 않은경우 , 기본값인 /etc/xdg 가 사용됩니다.
macOS 및 iOS에서 파일 형식이 NativeFormat 인 경우, 기본적으로 다음 파일이 사용됩니다:
$HOME/Library/Preferences/com.MySoft.Star Runner.plist$HOME/Library/Preferences/com.MySoft.plist/Library/Preferences/com.MySoft.Star Runner.plist/Library/Preferences/com.MySoft.plist
Windows에서는 NativeFormat 설정이 다음 레지스트리 경로에 저장됩니다:
HKEY_CURRENT_USER\Software\MySoft\Star RunnerHKEY_CURRENT_USER\Software\MySoft\OrganizationDefaultsHKEY_LOCAL_MACHINE\Software\MySoft\Star RunnerHKEY_LOCAL_MACHINE\Software\MySoft\OrganizationDefaults
참고: Windows에서 WOW64 모드로 실행되는 32비트 프로그램의 경우, 설정은 다음 레지스트리 경로에 저장됩니다: HKEY_LOCAL_MACHINE\Software\WOW6432node.
파일 형식이 NativeFormat 인 경우, 이는 애플리케이션의 홈 디렉터리 내 "Settings/MySoft/Star Runner.conf" 파일입니다.
파일 형식이 IniFormat 인 경우, Unix, macOS 및 iOS에서는 다음 파일이 사용됩니다:
$HOME/.config/MySoft/Star Runner.ini$HOME/.config/MySoft.ini- $XDG_CONFIG_DIRS에 포함된 각 디렉터리 <dir>에 대해:
<dir>/MySoft/Star Runner.ini - $XDG_CONFIG_DIRS에 포함된 각 디렉터리 <dir>에 대해:
<dir>/MySoft.ini
참고: XDG_CONFIG_DIRS가 설정되어 있지않으면 기본값인 /etc/xdg 가 사용됩니다.
Windows에서는 다음 파일이 사용됩니다:
FOLDERID_RoamingAppData\MySoft\Star Runner.iniFOLDERID_RoamingAppData\MySoft.iniFOLDERID_ProgramData\MySoft\Star Runner.iniFOLDERID_ProgramData\MySoft.ini
FOLDERID_ 로 시작하는 식별자는 Win32 API 함수 SHGetKnownFolderPath() 에 전달되어 해당 경로를 가져오는 특수 항목 ID 목록입니다.
FOLDERID_RoamingAppData 일반적으로 다음을 가리킵니다 C:\Users\User Name\AppData\Roaming를 가리키며, 이는 환경 변수 %APPDATA% 으로도 표시됩니다.
FOLDERID_ProgramData 일반적으로 다음을 가리킵니다 C:\ProgramData를 가리킵니다.
파일 형식이 IniFormat 인 경우, 이는 애플리케이션의 홈 디렉터리 내 "Settings/MySoft/Star Runner.ini"입니다.
.ini 및 .conf 파일의 경로는 setPath()를 사용하여 변경할 수 있습니다. Unix, macOS 및 iOS에서 사용자는 XDG_CONFIG_HOME 환경 변수를 설정하여 이를 재정의할 수 있습니다. 자세한 내용은 setPath()를 참조하십시오.
INI 및 .plist 파일에 직접 접근하기
때로는 특정 파일이나 레지스트리 경로에 저장된 설정에 직접 접근해야 할 때가 있습니다. 모든 플랫폼에서 INI 파일을 직접 읽으려면, 첫 번째 인자로 파일 이름을 받고 두 번째 인자로 ` QSettings::IniFormat `를 전달하는 QSettings 생성자를 사용할 수 있습니다. 예를 들어:
그런 다음 QSettings 객체를 사용하여 파일 내의 설정을 읽고 쓸 수 있습니다.
macOS 및 iOS에서는 두 번째 인자로 ` QSettings::NativeFormat `를 전달하여 속성 목록( .plist ) 파일에 접근할 수 있습니다. 예를 들어:
Windows 레지스트리에 직접 접근하기
Windows에서 QSettings를 사용하면 시스템 레지스트리에 QSettings로 기록된 설정(또는 지원되는 형식의 설정, 예: 문자열 데이터)에 접근할 수 있습니다. 이를 위해서는 레지스트리 경로와 ` QSettings::NativeFormat`를 사용하여 QSettings 객체를 생성하면 됩니다.
예를 들면 다음과 같습니다:
지정된 경로 아래에 나타나는 모든 레지스트리 항목은 평소와 같이(백슬래시 대신 슬래시를 사용하여) QSettings 객체를 통해 읽거나 쓸 수 있습니다. 예를 들어:
settings.setValue("11.0/Outlook/Security/DontTrustInstalledFiles", 0);앞서 언급한 바와 같이, 백슬래시 문자는 QSettings에서 하위 키를 구분하는 데 사용된다는 점에 유의하십시오. 따라서 슬래시나 백슬래시가 포함된 Windows 레지스트리 항목은 읽거나 쓸 수 없으며, 이러한 작업이 필요한 경우 네이티브 Windows API를 사용해야 합니다.
Windows에서 일반적인 레지스트리 설정에 액세스하기
Windows에서는 하나의 키가 값과 하위 키를 모두 가질 수 있습니다. 기본값에 접근하려면 하위 키 대신 "Default" 또는 "."를 사용합니다:
settings.setValue("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy", "Milkyway");
settings.setValue("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy\\Sun", "OurStar");
settings.value("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy\\Default"); // returns "Milkyway"Windows 이외의 플랫폼에서는 “Default”와 “.”가 일반 하위 키로 처리됩니다.
플랫폼별 제한 사항
QSettings는 지원되는 다양한 플랫폼 간의 차이를 최소화하려고 노력하지만, 애플리케이션을 이식할 때 유의해야 할 몇 가지 차이점이 여전히 존재합니다:
- Windows 시스템 레지스트리에는 다음과 같은 제한 사항이 있습니다. 하위 키의 길이는 255자를 초과할 수 없고, 항목의 값은 16,383자를 초과할 수 없으며, 키의 모든 값을 합친 길이는 65,535자를 초과할 수 없습니다. 이러한 제한을 우회하는 한 가지 방법은 NativeFormat 대신 IniFormat 을 사용하여 설정을 저장하는 것입니다.
- Windows에서 Windows 시스템 레지스트리를 사용할 경우, QSettings는 값의 원래 유형을 유지하지 않습니다. 따라서 새 값을 설정할 때 값의 유형이 변경될 수 있습니다. 예를 들어, 유형이
REG_EXPAND_SZ인 값은REG_SZ로 변경됩니다. - macOS 및 iOS에서는 allKeys()가 모든 애플리케이션에 적용되는 전역 설정에 대한 추가 키를 반환합니다. 이러한 키는 value()를 사용하여 읽을 수 있지만 변경할 수는 없고, 오직 가림 처리만 가능합니다. setFallbacksEnabled(false)를 호출하면 이러한 전역 설정이 숨겨집니다.
- macOS 및 iOS에서 QSettings가 사용하는 CFPreferences API는 조직명이 아닌 인터넷 도메인 이름을 기대합니다. 일관된 API를 제공하기 위해, QSettings는 조직명에서 가상의 도메인 이름을 파생시킵니다(조직명이 이미 도메인 이름인 경우, 예: OpenOffice.org는 제외). 이 알고리즘은 회사 이름 뒤에 ".com"을 추가하고, 공백 및 기타 허용되지 않는 문자를 하이픈으로 대체합니다. 다른 도메인 이름을 지정하려면
main()함수 내에서 QCoreApplication::setOrganizationDomain(), QCoreApplication::setOrganizationName(), QCoreApplication::setApplicationName()을 호출한 다음 기본 QSettings 생성자를 사용하십시오. 또 다른 해결책은 전처리기 지시문을 사용하는 것입니다. 예를 들어: - macOS에서는 10.7(Lion)부터 현재 사용자에게 속하지 않는 설정(예: SystemScope)에 대한 액세스 권한이 변경되었습니다. 이 버전 이전에는 관리자 권한을 가진 사용자가 해당 설정에 접근할 수 있었습니다. 10.7 및 10.8(Mountain Lion)에서는 root 사용자만 접근할 수 있습니다. 그러나 10.9(Mavericks)에서는 이 규칙이 다시 변경되었으나, 이는 네이티브 형식(plist 파일)에만 적용됩니다.
보안 고려 사항
이 클래스는 QDataStream 를 사용하여 데이터를 QVariant 로 역직렬화합니다. 따라서 동일한 security consideration as QDataStream 를 가지며, 신뢰할 수 있는 입력에 대해서만 사용해야 합니다.
QVariant 및 QSessionManager도 참조하십시오 .
멤버 유형 문서
enum QSettings::Format
이 열거형 유형은 QSettings 에서 사용하는 저장 형식을 지정합니다.
| 상수 | 상수 | 설명 |
|---|---|---|
QSettings::NativeFormat | 0 | 플랫폼에 가장 적합한 저장 형식을 사용하여 설정을 저장합니다. Windows에서는 시스템 레지스트리를, macOS 및 iOS에서는 CFPreferences API를, Unix에서는 INI 형식의 텍스트 구성 파일을 의미합니다. |
QSettings::Registry32Format | 2 | Windows 전용: 64비트 Windows에서 실행되는 64비트 애플리케이션에서 32비트 시스템 레지스트리에 명시적으로 액세스합니다. 32비트 Windows 또는 64비트 Windows의 32비트 애플리케이션에서는 NativeFormat을 지정하는 것과 동일하게 작동합니다. 이 열거형 값은 Qt 5.7에서 추가되었습니다. |
QSettings::Registry64Format | 3 | Windows 전용: 64비트 Windows에서 실행되는 32비트 애플리케이션에서 64비트 시스템 레지스트리에 명시적으로 액세스합니다. 32비트 Windows 또는 64비트 Windows에서 실행되는 64비트 애플리케이션의 경우, 이 기능은 NativeFormat을 지정하는 것과 동일하게 작동합니다. 이 열거형 값은 Qt 5.7에서 추가되었습니다. |
QSettings::IniFormat | 1 | 설정을 INI 파일에 저장합니다. INI 파일은 숫자 데이터와 이를 인코딩하는 데 사용되는 문자열 간의 구분을 잃어버리므로, 숫자로 기록된 값은 QString 로 다시 읽혀진다는 점에 유의하십시오. |
QSettings::WebLocalStorageFormat | 4 | WASM 전용: 설정을 현재 오리진의 window.localStorage에 저장합니다. 쿠키가 허용되지 않는 경우, INI 형식으로 대체됩니다. 이 방식은 오리진당 최대 5MiB의 저장 공간을 제공하지만, 액세스는 동기식이며 JSPI가 필요하지 않습니다. |
QSettings::WebIndexedDBFormat | 5 | WASM 전용: 현재 오리진에 대한 설정을 인덱스 DB에 저장합니다. 쿠키가 허용되지 않는 경우, INI 형식으로 대체됩니다. 이 방법은 JSPI가 필요하지만, WebLocalStorageFormat보다 더 많은 저장 공간을 제공합니다. |
QSettings::InvalidFormat | 16 | registerFormat()가 반환하는 특수 값입니다. |
Unix에서는 NativeFormat과 IniFormat이 파일 확장자만 다를 뿐(NativeFormat의 경우.conf, IniFormat의 경우 .ini ) 동일한 의미를 가집니다.
INI 파일 형식은 Qt가 모든 플랫폼에서 지원하는 Windows 파일 형식입니다. INI 표준이 없는 상황에서, 우리는 다음 예외 사항을 제외하고 Microsoft의 방식을 따르려고 노력합니다:
- QVariant 에서 QString 로 변환할 수 없는 데이터형(예: QPoint, QRect, QSize)을 저장하는 경우, Qt는
@기반의 구문을 사용하여 해당 데이터형을 인코딩합니다. 예를 들어:pos = @QPoint(100 100)호환성 문제를 최소화하기 위해, 값의 첫 번째 위치에 나타나지 않거나 Qt 유형(
Point,Rect,Size등)이 뒤따르지 않는@는 일반 문자로 처리됩니다. - 백슬래시는 INI 파일에서 특수 문자로 간주되지만, 대부분의 Windows 애플리케이션은 파일 경로에서 백슬래시(
\)를 이스케이프 처리하지 않습니다:windir = C:\WindowsQSettings 백슬래시를 항상 특수 문자로 취급하며, 이러한 항목을 읽거나 쓰기 위한 API를 제공하지 않습니다.
- INI 파일 형식은 키의 구문에 대해 엄격한 제한을 두고 있습니다. Qt XML은 키에서
%을 이스케이프 문자로 사용하여 이 문제를 해결합니다. 또한, 최상위 설정(슬래시가 포함되지 않은 키, 예: "someKey")을 저장하면, 이는 INI 파일의 "General" 섹션에 나타납니다. 다른 키를 덮어쓰지 않도록 하기 위해, “General/someKey”와 같은 키를 사용하여 항목을 저장하면, 해당 키는 “General” 섹션이 아닌 “%General” 섹션에 위치하게 됩니다. - 오늘날 대부분의 구현 방식에 따라, QSettings 은 INI 파일의 값이 UTF-8로 인코딩되어 있다고 가정합니다. 즉, 값은 UTF-8로 인코딩된 항목으로 디코딩된 후 UTF-8로 다시 기록됩니다. 이전 Qt 버전과의 하위 호환성을 유지하기 위해 INI 파일의 키는 %-인코딩 형식으로 기록되지만, %-인코딩 및 UTF-8 형식 모두로 읽을 수 있습니다.
이전 Qt 버전과의 호환성
이 동작은 Qt 6 이전 버전의 Qt에서 QSettings 가 작동하던 방식과는 다르다는 점에 유의하십시오. 그러나 Qt 5 이하 버전으로 작성된 INI 파일은 Qt 6 기반 애플리케이션에서 완전히 읽을 수 있습니다(utf8과 다른 ini 코덱이 설정되지 않은 경우). 하지만 Qt 6으로 작성된 INI 파일은 “iniCodec”을 UTF-8 텍스트 코덱으로 설정해야만 이전 버전의 Qt에서 읽을 수 있습니다.
registerFormat() 및 setPath()도 참조하십시오 .
QSettings::ReadFunc
다음과 같은 시그니처를 가진 함수 포인터에 대한 typedef:
ReadFunc registerFormat() 에서 일련의 키/값 쌍을 읽는 함수 포인터로 사용됩니다. 는 한 번의 처리로 모든 옵션을 읽어야 하며, 초기에는 비어 있는 컨테이너에 모든 설정을 반환해야 합니다. ReadFunc SettingsMap
WriteFunc 및 registerFormat()도 참조하십시오 .
enum QSettings::Scope
이 열거형은 설정이 사용자별로 적용되는지, 아니면 동일한 시스템의 모든 사용자가 공유하는지 여부를 지정합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QSettings::UserScope | 0 | 현재 사용자에게만 적용되는 위치(예: 사용자의 홈 디렉터리)에 설정을 저장합니다. |
QSettings::SystemScope | 1 | 설정을 전역 위치에 저장하여, 같은 컴퓨터의 모든 사용자가 동일한 설정 세트에 액세스할 수 있도록 합니다. |
setPath()도 참조하십시오 .
QSettings::SettingsMap
QMap 에 대한 typedef <QString, QVariant>.
registerFormat()도 참조하십시오 .
enum QSettings::Status
다음과 같은 상태 값이 가능합니다:
| 상수 | 값 | 설명 |
|---|---|---|
QSettings::NoError | 0 | 오류가 발생하지 않았습니다. |
QSettings::AccessError | 1 | 액세스 오류가 발생했습니다(예: 읽기 전용 파일에 쓰기를 시도한 경우). |
QSettings::FormatError | 2 | 형식 오류가 발생했습니다(예: 형식이 잘못된 INI 파일을 불러오는 경우). |
status()도 참조하십시오 .
QSettings::WriteFunc
다음 시그니처를 가진 함수 포인터에 대한 typedef:
WriteFunc registerFormat() 에서 일련의 키/값 쌍을 기록하는 함수 포인터로 사용됩니다. 는 한 번만 호출되므로, 설정을 한 번에 출력해야 합니다. WriteFunc
ReadFunc 및 registerFormat()도 참조하십시오 .
멤버 함수 문서
[explicit] QSettings::QSettings(QObject *parent = nullptr)
QCoreApplication::setOrganizationName(), QCoreApplication::setOrganizationDomain() 및 QCoreApplication::setApplicationName() 호출을 통해 이전에 설정된 애플리케이션 및 조직의 설정에 액세스하기 위한 QSettings 객체를 생성합니다.
범위는 QSettings::UserScope 이며 형식은 defaultFormat()입니다(기본값은QSettings::NativeFormat ). 이 생성자가 사용하는 기본 형식을 변경하려면 이 생성자를 호출하기 전에 setDefaultFormat()을 사용하십시오.
다음 코드는
QSettings settings("Moose Soft", "Facturo-Pro");다음과 동일합니다.
QCoreApplication::setOrganizationName("Moose Soft");
QCoreApplication::setApplicationName("Facturo-Pro");
QSettings settings;QCoreApplication::setOrganizationName() 및 QCoreApplication::setApplicationName()이 이전에 호출되지 않은 경우, QSettings 객체는 어떤 설정도 읽거나 쓸 수 없으며, status()은 AccessError 를 반환합니다.
도메인(macOS 및 iOS에서 기본으로 사용됨)과 이름(다른 플랫폼에서 기본으로 사용됨)을 모두 지정해야 하지만, 둘 중 하나만 지정해도 코드는 이를 처리하며, 이 경우 (모든 플랫폼에서) 해당 값이 사용됩니다. 단, 이 값이 기본값이 아닌 플랫폼에서는 파일의 일반적인 명명 규칙과 일치하지 않게 됩니다.
QCoreApplication::setOrganizationName(), QCoreApplication::setOrganizationDomain(), QCoreApplication::setApplicationName(), setDefaultFormat()도 참조하십시오 .
[explicit] QSettings::QSettings(QSettings::Scope scope, QObject *parent = nullptr)
QSettings(QObject *parent)와 동일한 방식으로 QSettings 객체를 생성하지만, 지정된 scope 를 사용합니다.
QSettings(QObject *parent)도 참조하십시오 .
QSettings::QSettings(const QString &fileName, QSettings::Format format, QObject *parent = nullptr)
parent 를 상위 항목으로 하는, fileName 라는 파일에 저장된 설정에 접근하기 위한 QSettings 객체를 생성합니다. 해당 파일이 아직 존재하지 않으면 새로 생성됩니다.
format 가 QSettings::NativeFormat 인 경우, fileName 의 의미는 플랫폼에 따라 다릅니다. 유닉스에서는 fileName 가 INI 파일의 이름입니다. macOS 및 iOS에서는 fileName 가 .plist 파일의 이름입니다. Windows에서는 fileName 가 시스템 레지스트리의 경로입니다.
format 가 QSettings::IniFormat 인 경우, fileName 는 INI 파일의 이름입니다.
경고: 이 함수는 편의상 제공됩니다. Qt에서 생성된 INI 또는 .plist 파일에 접근하는 데는 잘 작동하지만, 다른 프로그램에서 생성된 파일에서 발견되는 일부 구문에서는 오류가 발생할 수 있습니다. 특히 다음 제한 사항에 유의하십시오:
- QSettings는 INI "경로" 항목, 즉 이스케이프 처리되지 않은 슬래시 문자가 포함된 항목을 읽을 수 있는 방법을 제공하지 않습니다. (이는 이러한 항목이 모호하여 자동으로 해석할 수 없기 때문입니다.)
- INI 파일에서 QSettings는 특정 상황에서
@문자를 메타문자로 사용하여 Qt 고유의 데이터 유형(예:@Rect)을 인코딩하므로, 순수한 INI 파일에서 이 문자가 나타날 경우 잘못 해석될 수 있습니다.
fileName()도 참조하십시오 .
[explicit] QSettings::QSettings(const QString &organization, const QString &application = QString(), QObject *parent = nullptr)
organization 라는 조직에 속하고, 상위 조직이 parent 인 ‘ application ’라는 애플리케이션의 설정에 액세스하기 위한 QSettings 객체를 생성합니다.
예시:
QSettings settings("Moose Tech", "Facturo-Pro");범위는 QSettings::UserScope 로 설정되며, 형식은 QSettings::NativeFormat 로 설정됩니다(즉, 이 생성자를 호출하기 전에 setDefaultFormat()을 호출해도 아무런 효과가 없습니다).
setDefaultFormat() 및 Fallback Mechanism도 참조하십시오 .
QSettings::QSettings(QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = nullptr)
organization 라는 조직에 속하고, 상위 조직이 parent 인 ‘ application ’라는 애플리케이션의 설정에 액세스하기 위한 QSettings 객체를 생성합니다.
scope 이 QSettings::UserScope 인 경우, QSettings 객체는 먼저 사용자별 설정을 검색한 후, 대체로 시스템 전체 설정을 검색합니다. scope 이 QSettings::SystemScope 인 경우, QSettings 객체는 사용자별 설정을 무시하고 시스템 전체 설정에 대한 액세스를 제공합니다.
저장 형식은 QSettings::NativeFormat 로 설정됩니다(즉, 이 생성자를 호출하기 전에 setDefaultFormat()를 호출해도 아무런 효과가 없습니다).
애플리케이션 이름이 지정되지 않은 경우, QSettings 객체는 조직 전체의 locations 에만 액세스합니다.
setDefaultFormat()도 참조하십시오 .
QSettings::QSettings(QSettings::Format format, QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = nullptr)
organization 라는 조직에 속하고, 상위 조직이 parent 인 ‘ application ’라는 애플리케이션의 설정에 액세스하기 위한 QSettings 객체를 생성합니다.
scope 가 QSettings::UserScope 인 경우, QSettings 객체는 먼저 사용자별 설정을 검색하고, 그 후에 대체 수단으로 시스템 전체 설정을 검색합니다. scope 가 QSettings::SystemScope 인 경우, QSettings 객체는 사용자별 설정을 무시하고 시스템 전체 설정에 대한 액세스를 제공합니다.
format 가 QSettings::NativeFormat 인 경우, 설정을 저장하는 데 네이티브 API가 사용됩니다. format 가 QSettings::IniFormat 인 경우, INI 형식이 사용됩니다.
애플리케이션 이름이 지정되지 않은 경우, QSettings 객체는 조직 전체의 locations 에만 접근합니다.
[virtual noexcept] QSettings::~QSettings()
QSettings 객체를 삭제합니다.
저장되지 않은 변경 사항은 결국 영구 저장소에 기록됩니다.
sync()도 참조하십시오 .
QStringList QSettings::allKeys() const
QSettings 객체를 사용하여 읽을 수 있는 모든 키(하위 키 포함)의 목록을 반환합니다.
예시:
QSettings settings;
settings.setValue("fridge/color", QColor(Qt::white));
settings.setValue("fridge/size", QSize(32, 96));
settings.setValue("sofa", true);
settings.setValue("tv", false);
QStringList keys = settings.allKeys();
// keys: ["fridge/color", "fridge/size", "sofa", "tv"]beginGroup()를 사용하여 그룹이 설정된 경우, 그룹 접두사 없이 해당 그룹에 속한 키만 반환됩니다:
settings.beginGroup("fridge");
keys = settings.allKeys();
// keys: ["color", "size"]childGroups() 및 childKeys()도 참조하십시오 .
QString QSettings::applicationName() const
설정을 저장하는 데 사용되는 애플리케이션 이름을 반환합니다.
QCoreApplication::applicationName(), format(), scope(), organizationName()도 참조하십시오 .
void QSettings::beginGroup(QAnyStringView prefix)
현재 그룹에 ‘ prefix ’을 추가합니다.
QSettings 에 지정된 모든 키 앞에는 현재 그룹이 자동으로 추가됩니다. 또한, childGroups(), childKeys(), allKeys()와 같은 쿼리 함수는 이 그룹을 기반으로 합니다. 기본적으로 그룹은 설정되어 있지 않습니다.
그룹을 사용하면 동일한 설정 경로를 반복해서 입력할 필요가 없어 편리합니다. 예를 들어:
settings.beginGroup("mainwindow");
settings.setValue("size", win->size());
settings.setValue("active", win->isActive());
settings.endGroup();
settings.beginGroup("outputpanel");
settings.setValue("visible", panel->isVisible());
settings.endGroup();이 코드는 다음 세 가지 설정의 값을 설정합니다:
mainwindow/sizemainwindow/activeoutputpanel/visible
endGroup()를 호출하면 현재 그룹을 해당 beginGroup() 호출 이전 상태로 재설정할 수 있습니다. 그룹은 중첩될 수 있습니다.
참고: Qt 6.4 이전버전에서는 이 함수가 QAnyStringView 이 아닌 QString 을 인수로 받았습니다.
endGroup() 및 group()도 참조하십시오 .
int QSettings::beginReadArray(QAnyStringView prefix)
prefix 를 현재 그룹에 추가하고 배열에서 읽기를 시작합니다. 배열의 크기를 반환합니다.
예시:
struct Login {
QString userName;
QString password;
};
QList<Login> logins;
//...
void some_function()
{
//...
QSettings settings;
int size = settings.beginReadArray("logins");
for (int i = 0; i < size; ++i) {
settings.setArrayIndex(i);
Login login;
login.userName = settings.value("userName").toString();
login.password = settings.value("password").toString();
logins.append(login);
}
settings.endArray();
//...
}beginWriteArray()를 사용하여 먼저 배열을 작성하십시오.
참고: Qt 6.4 이전버전에서는 이 함수가 ` QString`를 인수로 받았으며, ` QAnyStringView`는 받지 않았습니다.
참조: beginWriteArray(), endArray(), setArrayIndex().
void QSettings::beginWriteArray(QAnyStringView prefix, int size = -1)
prefix 를 현재 그룹에 추가하고, 크기 size 인 배열에 쓰기를 시작합니다. size 가 -1(기본값)인 경우, 쓰여진 항목의 인덱스를 기준으로 크기가 자동으로 결정됩니다.
특정 키 세트가 여러 번 반복되는 경우, 배열을 사용하면 작업을 훨씬 수월하게 처리할 수 있습니다. 예를 들어, 가변 길이의 사용자 이름과 비밀번호 목록을 저장하고자 한다고 가정해 보겠습니다. 이 경우 다음과 같이 작성할 수 있습니다:
struct Login {
QString userName;
QString password;
};
QList<Login> logins;
//...
void some_function()
{
//...
QSettings settings;
settings.beginWriteArray("logins");
for (qsizetype i = 0; i < logins.size(); ++i) {
settings.setArrayIndex(i);
settings.setValue("userName", logins.at(i).userName);
settings.setValue("password", logins.at(i).password);
}
settings.endArray();
//...
}생성된 키는 다음과 같은 형식을 갖습니다.
logins/sizelogins/1/userNamelogins/1/passwordlogins/2/userNamelogins/2/passwordlogins/3/userNamelogins/3/password- ...
배열을 다시 읽어오려면 ` beginReadArray()`를 사용합니다.
참고: Qt 6.4 이전버전에서는 이 함수가 ` QString`를 매개변수로 받았으며, ` QAnyStringView`는 아니었습니다.
beginReadArray(), endArray(), setArrayIndex()도 참조하십시오 .
QStringList QSettings::childGroups() const
QSettings 객체를 사용하여 읽을 수 있는 키를 포함하는 모든 최상위 그룹의 목록을 반환합니다.
예시:
QSettings settings;
settings.setValue("fridge/color", QColor(Qt::white));
settings.setValue("fridge/size", QSize(32, 96));
settings.setValue("sofa", true);
settings.setValue("tv", false);
QStringList groups = settings.childGroups();
// groups: ["fridge"]beginGroup()를 사용하여 그룹이 설정된 경우, 해당 그룹의 1단계 키들이 그룹 접두사 없이 반환됩니다.
settings.beginGroup("fridge");
groups = settings.childGroups();
// groups: []childKeys() 및 childGroups()를 재귀적으로 사용하여 전체 설정 계층 구조를 탐색할 수 있습니다.
childKeys() 및 allKeys()도 참조하십시오 .
QStringList QSettings::childKeys() const
QSettings 객체를 사용하여 읽을 수 있는 모든 최상위 키의 목록을 반환합니다.
예시:
QSettings settings;
settings.setValue("fridge/color", QColor(Qt::white));
settings.setValue("fridge/size", QSize(32, 96));
settings.setValue("sofa", true);
settings.setValue("tv", false);
QStringList keys = settings.childKeys();
// keys: ["sofa", "tv"]beginGroup()를 사용하여 그룹이 설정된 경우, 해당 그룹의 최상위 키들이 그룹 접두사 없이 반환됩니다:
settings.beginGroup("fridge");
keys = settings.childKeys();
// keys: ["color", "size"]childKeys()와 childGroups()를 재귀적으로 사용하여 전체 설정 계층 구조를 탐색할 수 있습니다.
childGroups() 및 allKeys()도 참조하십시오 .
void QSettings::clear()
이 ` QSettings ` 객체와 연결된 기본 위치의 모든 항목을 제거합니다.
대체 위치에 있는 항목은 제거되지 않습니다.
현재 group()의 항목만 제거하려면 대신 remove("")를 사용하십시오.
remove() 및 setFallbacksEnabled()도 참조하십시오 .
bool QSettings::contains(QAnyStringView key) const
key 라는 설정이 존재하면 true 를 반환하고, 그렇지 않으면 false를 반환합니다.
beginGroup()를 사용하여 그룹이 설정된 경우, key 는 해당 그룹을 기준으로 간주됩니다.
키 조회는 파일 형식과 운영 체제에 따라 대소문자를 구분하거나 구분하지 않을 수 있습니다. 이식성 문제를 방지하려면 Section and Key Syntax 규칙을 참조하십시오.
참고: Qt 6.4 이전버전에서는 이 함수가 ` QString`를 인수로 받았으며, ` QAnyStringView`는 받지 않았습니다.
value() 및 setValue()도 참조하십시오 .
[static] QSettings::Format QSettings::defaultFormat()
QSettings(QObject *) 생성자에 사용되는 설정 저장에 대한 기본 파일 형식을 반환합니다. 기본 형식이 설정되지 않은 경우 QSettings::NativeFormat 가 사용됩니다.
setDefaultFormat() 및 format()도 참조하십시오 .
void QSettings::endArray()
beginReadArray() 또는 beginWriteArray()를 사용하여 생성된 배열을 닫습니다.
beginReadArray() 및 beginWriteArray()도 참조하십시오 .
void QSettings::endGroup()
해당 ` beginGroup()` 호출 이전의 상태로 그룹을 초기화합니다.
예:
settings.beginGroup("alpha");
// settings.group() == "alpha"
settings.beginGroup("beta");
// settings.group() == "alpha/beta"
settings.endGroup();
// settings.group() == "alpha"
settings.endGroup();
// settings.group() == ""beginGroup() 및 group()도 참조하십시오 .
[override virtual protected] bool QSettings::event(QEvent *event)
QObject::event(QEvent *e)를 재구현합니다.
bool QSettings::fallbacksEnabled() const
폴백이 활성화되어 있으면 ` true `을 반환하고, 그렇지 않으면 ` false `을 반환합니다.
기본적으로 대체 기능이 활성화되어 있습니다.
setFallbacksEnabled()도 참조하십시오 .
QString QSettings::fileName() const
이 QSettings 객체를 사용하여 작성된 설정이 저장된 경로를 반환합니다.
Windows에서 형식이 QSettings::NativeFormat 인 경우, 반환 값은 파일 경로가 아닌 시스템 레지스트리 경로입니다.
isWritable() 및 format()도 참조하십시오 .
QSettings::Format QSettings::format() const
설정을 저장하는 데 사용되는 형식을 반환합니다.
defaultFormat(), fileName(), scope(), organizationName(), applicationName()도 참조하십시오 .
QString QSettings::group() const
현재 그룹을 반환합니다.
beginGroup() 및 endGroup()도 참조하십시오 .
bool QSettings::isAtomicSyncRequired() const
QSettings 가 설정의 원자적 저장 및 재로드(동기화)만 수행할 수 있는 경우 true 를 반환합니다. 설정 내용을 구성 파일에 직접 저장할 수 있는 경우 false 를 반환합니다.
기본값은 true 입니다.
setAtomicSyncRequired() 및 QSaveFile도 참조하십시오 .
bool QSettings::isWritable() const
이 QSettings 객체를 사용하여 설정에 쓰기 작업이 가능한 경우 true 을 반환하고, 그렇지 않은 경우 false 을 반환합니다.
isWritable()가 false를 반환할 수 있는 한 가지 이유는 QSettings 가 읽기 전용 파일을 대상으로 할 경우입니다.
경고: 파일 권한은 언제든지 변경될 수 있으므로이 함수는 완벽하게 신뢰할 수 없습니다.
fileName(), status() 및 sync()도 참조하십시오 .
QString QSettings::organizationName() const
설정을 저장하는 데 사용되는 조직 이름을 반환합니다.
QCoreApplication::organizationName(), format(), scope(), applicationName()도 참조하십시오 .
[static] QSettings::Format QSettings::registerFormat(const QString &extension, QSettings::ReadFunc readFunc, QSettings::WriteFunc writeFunc, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive)
사용자 정의 저장 형식을 등록합니다. 성공 시, QSettings 생성자에 전달할 수 있는 특수한 Format 값을 반환합니다. 실패 시, ` InvalidFormat`를 반환합니다.
extension 는 해당 형식과 연관된 파일 확장자입니다('.' 제외).
readFunc 및 writeFunc 매개변수는 일련의 키/값 쌍을 읽고 쓰는 함수에 대한 포인터입니다. 읽기 및 쓰기 함수에 전달되는 QIODevice 매개변수는 항상 이진 모드(즉, QIODeviceBase::Text 플래그 없이)로 열립니다.
caseSensitivity 매개변수는 키에 대소문자를 구분할지 여부를 지정합니다. 이는 QSettings 을 사용하여 값을 조회할 때 차이가 발생합니다. 기본값은 대소문자를 구분하는 것입니다. 유닉스 시스템에서는 이 매개변수가 Qt::CaseSensitive 이어야 합니다.
기본적으로 조직 이름과 애플리케이션 이름을 기반으로 작동하는 생성자 중 하나를 사용하는 경우, 사용되는 파일 시스템 위치는 IniFormat 과 동일합니다. 다른 위치를 지정하려면 setPath()을 사용하십시오.
예:
bool readXmlFile(QIODevice &device, QSettings::SettingsMap &map);
bool writeXmlFile(QIODevice &device, const QSettings::SettingsMap &map);
int main(int argc, char *argv[])
{
const QSettings::Format XmlFormat =
QSettings::registerFormat("xml", readXmlFile, writeXmlFile);
QSettings settings(XmlFormat, QSettings::UserScope, "MySoft",
"Star Runner");
//...
}참고: 이 함수는 스레드 안전합니다.
setPath()도 참조하십시오 .
void QSettings::remove(QAnyStringView key)
key 설정과 key 의 모든 하위 설정을 제거합니다.
예시:
QSettings settings;
settings.setValue("ape", 0);
settings.setValue("monkey", 1);
settings.setValue("monkey/sea", 2);
settings.setValue("monkey/doe", 4);
settings.remove("monkey");
QStringList keys = settings.allKeys();
// keys: ["ape"]대체 위치 중 하나에 동일한 키를 가진 설정이 포함되어 있는 경우, remove()를 호출한 후에도 해당 설정이 계속 표시된다는 점에 유의하십시오.
key 가 빈 문자열인 경우, 현재 group()에 포함된 모든 키가 제거됩니다. 예:
QSettings settings;
settings.setValue("ape", 0);
settings.setValue("monkey", 1);
settings.setValue("monkey/sea", 2);
settings.setValue("monkey/doe", 4);
settings.beginGroup("monkey");
settings.remove("");
settings.endGroup();
QStringList keys = settings.allKeys();
// keys: ["ape"]키 조회는 파일 형식과 운영 체제에 따라 대소문자를 구분하거나 구분하지 않을 수 있습니다. 이식성 문제를 방지하려면 Section and Key Syntax 규칙을 참조하십시오.
참고: Qt 6.4 이전버전에서는 이 함수가 ` QString`를 인수로 받았으며, ` QAnyStringView`는 받지 않았습니다.
setValue(), value(), contains()도 참조하십시오 .
QSettings::Scope QSettings::scope() const
설정을 저장하는 데 사용되는 범위를 반환합니다.
format(), organizationName(), applicationName()도 참조하십시오 .
void QSettings::setArrayIndex(int i)
현재 배열 인덱스를 i 로 설정합니다. setValue(), value(), remove(), contains()와 같은 함수를 호출하면 해당 인덱스에 있는 배열 요소에 대해 연산이 수행됩니다.
이 함수를 호출하기 전에 반드시 beginReadArray() 또는 beginWriteArray()을 호출해야 합니다.
void QSettings::setAtomicSyncRequired(bool enable)
QSettings 가 설정의 원자적 저장 및 재로드(동기화)를 수행해야 하는지 여부를 구성합니다. enable 인수가 true (기본값)인 경우, sync()는 원자적인 동기화 작업만 수행합니다. 이것이 불가능할 경우, sync()는 실패하고 status()는 오류 상태가 됩니다.
이 속성을 false 로 설정하면 QSettings 가 구성 파일에 직접 쓰기를 수행할 수 있으며, 동시에 쓰기를 시도하는 다른 프로세스로 인해 발생하는 잠금 오류는 무시됩니다. 데이터 손상의 가능성이 있으므로 이 옵션은 신중하게 사용해야 하지만, 쓰기 불가능한 디렉터리에 존재하는 QSettings::IniFormat 구성 파일이나 NTFS 대체 데이터 스트림(Alternate Data Streams)과 같은 특정 조건에서는 이 옵션이 필요합니다.
이 기능에 대한 자세한 내용은 QSaveFile 를 참조하십시오.
isAtomicSyncRequired() 및 QSaveFile도 참조하십시오 .
[static] void QSettings::setDefaultFormat(QSettings::Format format)
기본 파일 형식을 지정된 ` format`로 설정합니다. 이 형식은 ` QSettings`(`QObject *`) 생성자의 설정을 저장하는 데 사용됩니다.
기본 형식이 설정되지 않은 경우 QSettings::NativeFormat 가 사용됩니다. 사용 중인 QSettings 생성자가 이 함수를 무시하는지 확인하려면 해당 생성자의 문서를 참조하십시오.
defaultFormat() 및 format()도 참조하십시오 .
void QSettings::setFallbacksEnabled(bool b)
b 에 대한 대체 처리 기능이 활성화되어 있는지 여부를 설정합니다.
기본적으로 대체 기능이 활성화되어 있습니다.
fallbacksEnabled()도 참조하십시오 .
[static] void QSettings::setPath(QSettings::Format format, QSettings::Scope scope, const QString &path)
지정된 format 및 scope 의 설정 저장 경로를 path 로 설정합니다. format 는 사용자 정의 형식일 수 있습니다.
아래 표는 기본값을 요약한 것입니다:
| 플랫폼 | 형식 | 범위 | 경로 |
|---|---|---|---|
| Windows | IniFormat | UserScope | FOLDERID_RoamingAppData |
| SystemScope | FOLDERID_ProgramData | ||
| 유닉스 | NativeFormat, IniFormat | UserScope | $HOME/.config ($XDG_CONFIG_HOME) |
| SystemScope | /etc/xdg | ||
| macOS | IniFormat | UserScope | $HOME/.config ($XDG_CONFIG_HOME) |
| SystemScope | /Library/Preferences/Qt | ||
| iOS | IniFormat | UserScope | $HOME/Library/Preferences |
| SystemScope | /Library/Preferences/Qt | ||
| macOS 및 iOS | NativeFormat | UserScope | $HOME/Library/Preferences |
| SystemScope | /Library/Preferences |
Qt를 빌드할 때 ` configure ` 스크립트에 ` -sysconfdir `을 전달하여 기본 ` SystemScope ` 경로를 재정의할 수 있습니다(자세한 내용은 QLibraryInfo 참조).
참고: Windows, macOS 및 iOS에서 NativeFormat 경로를설정해도 아무런 효과가 없습니다.
경고: 이 함수는 기존 QSettings 객체에는 영향을 미치지 않습니다.
참조: registerFormat().
void QSettings::setValue(QAnyStringView key, const QVariant &value)
key 설정의 값을 value 로 설정합니다. key 가 이미 존재하는 경우, 기존 값이 덮어쓰여집니다.
키 조회는 파일 형식과 운영 체제에 따라 대소문자를 구분하거나 구분하지 않을 수 있습니다. 이식성 문제를 방지하려면 Section and Key Syntax 규칙을 참조하십시오.
예:
QSettings settings;
settings.setValue("interval", 30);
settings.value("interval").toInt(); // returns 30
settings.setValue("interval", 6.55);
settings.value("interval").toDouble(); // returns 6.55참고: Qt 6.4 이전버전에서는 이 함수가 ` QString`를 인수로 받았으며, ` QAnyStringView`는 받지 않았습니다.
value(), remove(), contains()도 참조하십시오 .
QSettings::Status QSettings::status() const
QSettings 에서 발생한 첫 번째 오류를 나타내는 상태 코드를 반환하며, 오류가 발생하지 않은 경우에는 QSettings::NoError 을 반환합니다.
QSettings 는 일부 작업의 실행을 지연시킨다는 점에 유의하십시오. 이 때문에 status()를 호출하기 전에 QSettings 에 저장된 데이터가 디스크에 정상적으로 기록되었는지 확인하려면 sync()를 호출하는 것이 좋습니다.
sync()도 참조하십시오 .
void QSettings::sync()
저장되지 않은 변경 사항을 영구 저장소에 기록하고, 그동안 다른 애플리케이션에 의해 변경된 설정을 다시 불러옵니다.
이 함수는 QSettings 의 소멸자에서 자동으로 호출되며, 이벤트 루프에 의해 정기적으로 호출되므로 일반적으로 직접 호출할 필요는 없습니다.
status()도 참조하십시오 .
QVariant QSettings::value(QAnyStringView key) const
QVariant QSettings::value(QAnyStringView key, const QVariant &defaultValue) const
key 설정을 위한 값을 반환합니다. 해당 설정이 존재하지 않으면 defaultValue 를 반환합니다.
기본값이 지정되지 않은 경우, 기본 QVariant 값이 반환됩니다.
키 조회는 파일 형식과 운영 체제에 따라 대소문자를 구분하거나 구분하지 않을 수 있습니다. 이식성 문제를 방지하려면 Section and Key Syntax 규칙을 참조하십시오.
예제:
QSettings settings;
settings.setValue("animal/snake", 58);
settings.value("animal/snake", 1024).toInt(); // returns 58
settings.value("animal/zebra", 1024).toInt(); // returns 1024
settings.value("animal/zebra").toInt(); // returns 0참고: Qt 6.4 이전버전에서는 이 함수가 ` QAnyStringView`가 아닌 ` QString`를 인수로 받았습니다.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.