QSettings Class

QSettings 클래스는 플랫폼에 독립적인 애플리케이션 설정을 영구적으로 제공합니다. 더 보기...

Header: #include <QSettings>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속합니다: QObject

참고: 이 클래스의 모든 함수는 재진입 가능합니다.

참고: 이 함수들은 스레드 안전합니다:

  • 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에서는 속성 목록 파일에 저장되는 경우가 많습니다. 유닉스 시스템에서는 표준이 없기 때문에 많은 애플리케이션(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");

스택 또는 힙(예: new)에서 QSettings 개체를 만들 수 있습니다. 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()를 호출합니다.

Q배리언트 및 GUI 유형

QVariantQt 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 로의 변환)은 GUI 관련 유형을 포함하여 QVariant 에서 지원하는 모든 데이터 유형에 대해 자동으로 수행됩니다:

QSettings settings("MySoft", "Star Runner");
QColor color = palette().background().color();
settings.setValue("DataPump/bgcolor", color);

qRegisterMetaType()를 사용하여 등록한 사용자 지정 유형 중 QDataStream 으로 스트리밍하기 위한 연산자가 있는 유형은 QSettings를 사용하여 저장할 수 있습니다.

섹션 및 키 구문

설정 키에는 모든 유니코드 문자를 포함할 수 있습니다. Windows 레지스트리 및 INI 파일은 대소문자를 구분하지 않는 키를 사용하는 반면, macOS 및 iOS의 CFPreferences API는 대소문자를 구분하는 키를 사용합니다. 이식성 문제를 방지하려면 다음과 같은 간단한 규칙을 따르세요:

  1. 항상 같은 대소문자를 사용하여 같은 키를 참조하세요. 예를 들어 코드의 한 곳에서 키를 "텍스트 글꼴"로 지칭하는 경우 다른 곳에서는 "텍스트 글꼴"로 지칭하지 마세요.
  2. 대소문자를 제외하고 동일한 키 이름은 피하세요. 예를 들어 "MainWindow"라는 키가 있는 경우 다른 키를 "mainwindow"로 저장하지 마세요.
  3. 섹션이나 키 이름에 슬래시('/' 및 '\')를 사용하지 마세요. 백슬래시 문자는 하위 키를 구분하는 데 사용됩니다(아래 참조). 창에서 '\'는 QSettings에 의해 '/'로 변환되므로 동일하게 됩니다.

Unix 파일 경로와 유사하게 '/' 문자를 구분 기호로 사용하여 계층적 키를 만들 수 있습니다. 예를 들어

    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 개체를 만들었다고 가정해 보겠습니다. 값을 조회할 때 최대 4개의 위치가 순서대로 검색됩니다:

  1. Star Runner 애플리케이션에 대한 사용자별 위치
  2. MySoft의 모든 애플리케이션에 대한 사용자별 위치
  3. 스타 러너 애플리케이션의 시스템 전체 위치
  4. 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"는 해당 위치가 읽기 시 폴백으로 사용됨을 의미합니다.

위치obj1obj2obj3obj4
1. 사용자, 애플리케이션X
2. 사용자, 조직oX
3. 시스템, 애플리케이션oX
4. 시스템, 조직oooX

이 메커니즘의 장점은 Qt가 지원하는 모든 플랫폼에서 작동하며 파일 이름이나 레지스트리 경로를 지정할 필요 없이 많은 유연성을 제공한다는 것입니다.

네이티브 API 대신 모든 플랫폼에서 INI 파일을 사용하려면 QSettings 생성자에 첫 번째 인수로 QSettings::IniFormat 를 전달하고 그 뒤에 범위, 조직 이름, 애플리케이션 이름을 전달하면 됩니다:

    QSettings settings(QSettings::IniFormat, QSettings::UserScope,
                       "MySoft", "Star Runner");

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()을 호출하는 것이 더 나은 이유에 대한 설명은 창 지오메트리를 참조하세요.

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는 설정이 사용자별인지 시스템 전체인지, 설정이 애플리케이션별인지 조직 전체인지에 따라 최대 4개의 위치에 애플리케이션의 설정을 저장합니다. 간단히 설명하기 위해 조직을 MySoft라고 하고 애플리케이션을 Star Runner라고 가정합니다.

Unix 시스템에서 파일 형식이 NativeFormat 인 경우 기본적으로 다음 파일이 사용됩니다:

  1. $HOME/.config/MySoft/Star Runner.conf
  2. $HOME/.config/MySoft.conf
  3. XDG_CONFIG_DIRS의 각 디렉터리 <dir>에 대해: <dir>/MySoft/Star Runner.conf
  4. XDG_CONFIG_DIRS의 각 디렉토리 <dir>에 대해: <dir>/MySoft.conf

참고: XDG_CONFIG_DIRS가 설정되지 않은 경우 기본값인 /etc/xdg 이 사용됩니다.

macOS 및 iOS에서 파일 형식이 NativeFormat 인 경우 이 파일이 기본적으로 사용됩니다:

  1. $HOME/Library/Preferences/com.MySoft.Star Runner.plist
  2. $HOME/Library/Preferences/com.MySoft.plist
  3. /Library/Preferences/com.MySoft.Star Runner.plist
  4. /Library/Preferences/com.MySoft.plist

Windows에서는 NativeFormat 설정이 다음 레지스트리 경로에 저장됩니다:

  1. HKEY_CURRENT_USER\Software\MySoft\Star Runner
  2. HKEY_CURRENT_USER\Software\MySoft\OrganizationDefaults
  3. HKEY_LOCAL_MACHINE\Software\MySoft\Star Runner
  4. HKEY_LOCAL_MACHINE\Software\MySoft\OrganizationDefaults

참고: Windows에서 WOW64 모드로 실행되는 32비트 프로그램의 경우 설정은 다음 레지스트리 경로에 저장됩니다: HKEY_LOCAL_MACHINE\Software\WOW6432node.

파일 형식이 NativeFormat 인 경우, 애플리케이션의 홈 디렉터리에 있는 "Settings/MySoft/Star Runner.conf"입니다.

파일 형식이 IniFormat 인 경우 Unix, macOS 및 iOS에서 다음 파일이 사용됩니다:

  1. $HOME/.config/MySoft/Star Runner.ini
  2. $HOME/.config/MySoft.ini
  3. XDG_CONFIG_DIRS의 각 디렉터리 <dir>에 대해: <dir>/MySoft/Star Runner.ini
  4. XDG_CONFIG_DIRS의 각 디렉토리 <dir>에 대해: <dir>/MySoft.ini

참고: XDG_CONFIG_DIRS가 설정되지 않은 경우 기본값인 /etc/xdg 이 사용됩니다.

Windows에서는 다음 파일이 사용됩니다:

  1. FOLDERID_RoamingAppData\MySoft\Star Runner.ini
  2. FOLDERID_RoamingAppData\MySoft.ini
  3. FOLDERID_ProgramData\MySoft\Star Runner.ini
  4. FOLDERID_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 settings("/home/petra/misc/myapp.ini",
                   QSettings::IniFormat);

그런 다음 QSettings 개체를 사용하여 파일에서 설정을 읽고 쓸 수 있습니다.

macOS 및 iOS에서는 QSettings::NativeFormat 을 두 번째 인수로 전달하여 속성 목록 .plist 파일에 액세스할 수 있습니다. 예

QSettings settings("/Users/petra/misc/myapp.plist",
                   QSettings::NativeFormat);

Windows 레지스트리에 직접 액세스하기

Windows에서는 QSettings를 사용하여 시스템 레지스트리에 QSettings로 작성된 설정(또는 지원되는 형식(예: 문자열 데이터)의 설정)에 액세스할 수 있습니다. 이 작업은 레지스트리의 경로와 QSettings::NativeFormat 를 사용하여 QSettings 개체를 구성하면 됩니다.

예를 들어

QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Office",
                   QSettings::NativeFormat);

지정된 경로 아래에 나타나는 모든 레지스트리 항목은 평소와 같이 (백슬래시 대신 슬래시 사용) 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 생성자를 사용하세요. 또 다른 해결책은 예를 들어 전처리기 지시문을 사용하는 것입니다:
    #ifdef Q_OS_DARWIN
        QSettings settings("grenoullelogique.fr", "Squash");
    #else
        QSettings settings("Grenoulle Logique", "Squash");
    #endif
  • macOS에서는 현재 사용자에게 속하지 않은 설정(예: SystemScope)에 액세스할 수 있는 권한이 10.7(Lion)에서 변경되었습니다. 해당 버전 이전에는 관리자 권한이 있는 사용자가 이러한 설정에 액세스할 수 있었습니다. 10.7 및 10.8(Mountain Lion)의 경우 루트 권한만 사용할 수 있습니다. 그러나 10.9(매버릭스)에서는 이 규칙이 다시 변경되었지만 기본 형식(plist 파일)에 대해서만 변경되었습니다.

QVariantQSessionManager참조하세요 .

멤버 유형 문서

enum QSettings::Format

이 열거형 유형은 QSettings 에서 사용하는 저장소 형식을 지정합니다.

Constant설명
QSettings::NativeFormat0플랫폼에 가장 적합한 저장 형식을 사용하여 설정을 저장합니다. Windows에서는 시스템 레지스트리를, macOS 및 iOS에서는 CFPreferences API를, Unix에서는 INI 형식의 텍스트 구성 파일을 의미합니다.
QSettings::Registry32Format2Windows에만 해당됩니다: 64비트 Windows에서 실행되는 64비트 애플리케이션에서 32비트 시스템 레지스트리에 명시적으로 액세스합니다. 32비트 Windows 또는 64비트 Windows의 32비트 애플리케이션에서 NativeFormat을 지정하는 것과 동일하게 작동합니다. 이 열거형 값은 Qt 5.7에서 추가되었습니다.
QSettings::Registry64Format3Windows에만 해당됩니다: 64비트 Windows에서 실행되는 32비트 응용 프로그램에서 64비트 시스템 레지스트리에 명시적으로 액세스합니다. 32비트 Windows에서 또는 64비트 Windows의 64비트 응용 프로그램에서 NativeFormat을 지정하는 것과 동일하게 작동합니다. 이 열거형 값은 Qt 5.7에서 추가되었습니다.
QSettings::IniFormat1설정을 INI 파일에 저장합니다. INI 파일은 숫자 데이터와 이를 인코딩하는 데 사용된 문자열의 구분이 없어지므로 숫자로 작성된 값은 QString 로 다시 읽혀야 합니다.
QSettings::WebLocalStorageFormat4WASM에만 해당됩니다: 현재 원점에 대한 설정을 window.localStorage에 저장합니다. 쿠키가 허용되지 않는 경우 INI 형식으로 되돌아갑니다. 이 경우 원본당 최대 5MiB의 저장 공간을 제공하지만, 동기식으로 액세스할 수 있으며 JSPI는 필요하지 않습니다.
QSettings::WebIndexedDBFormat5WASM만 해당: 현재 출처에 대한 인덱싱된 DB에 설정을 저장합니다. 쿠키가 허용되지 않는 경우 INI 형식으로 되돌아갑니다. 이 경우 JSPI가 필요하지만 WebLocalStorageFormat보다 더 많은 저장 공간을 제공합니다.
QSettings::InvalidFormat16registerFormat()에서 반환하는 특수 값입니다.

유닉스에서는 파일 확장자가 다르다는 점을 제외하면 NativeFormat과 IniFormat은 같은 의미입니다(NativeFormat의 경우.conf, IniFormat의 경우 .ini ).

INI 파일 형식은 Qt가 모든 플랫폼에서 지원하는 Windows 파일 형식입니다. INI 표준이 없는 경우, 다음과 같은 예외를 제외하고는 Microsoft가 하는 것을 따르려고 노력합니다:

  • QVariant 에서 QString 로 변환할 수 없는 유형(예: QPoint, QRect, QSize)을 저장하는 경우, Qt는 @ 기반 구문을 사용하여 해당 유형을 인코딩합니다. 예를 들어
    pos = @Point(100 100)

    호환성 문제를 최소화하기 위해 값의 첫 번째 위치에 나타나지 않거나 Qt 유형(Point, Rect, Size 등)이 뒤에 오지 않는 @ 은 일반 문자로 취급됩니다.

  • 백슬래시는 INI 파일에서 특수 문자이긴 하지만 대부분의 Windows 애플리케이션은 파일 경로에서 백슬래시(\)를 이스케이프 처리하지 않습니다:
    windir = C:\Windows

    QSettings 는 항상 백슬래시를 특수 문자로 취급하며 이러한 항목을 읽거나 쓰기 위한 API를 제공하지 않습니다.

  • INI 파일 형식은 키의 구문에 심각한 제한이 있습니다. Qt는 키의 이스케이프 문자로 % 을 사용하여 이 문제를 해결합니다. 또한 최상위 설정(슬래시가 없는 키, 예: "someKey")을 저장하면 INI 파일의 "일반" 섹션에 나타납니다. 다른 키를 덮어쓰는 것을 방지하기 위해 "General/someKey"와 같은 키를 사용하여 무언가를 저장하면 해당 키는 "일반" 섹션이 아닌 "%일반" 섹션에 위치하게 됩니다.
  • 오늘날 대부분의 구현과 마찬가지로 QSettings 은 INI 파일의 값이 utf-8로 인코딩되어 있다고 가정합니다. 즉, 값이 utf-8로 인코딩된 항목으로 디코딩되고 다시 utf-8로 기록됩니다. 이전 Qt 버전과의 하위 호환성을 유지하기 위해 INI 파일의 키는 %-인코딩된 형식으로 작성되지만 %-인코딩된 형식과 utf-8 형식 모두에서 읽을 수 있습니다.
이전 Qt 버전과의 호환성

이 동작은 Qt 6 이전 버전에서 QSettings 의 동작과 다르다는 점에 유의하십시오. 그러나 Qt 5 이하로 작성된 INI 파일은 (utf8과 다른 INI 코덱이 설정되어 있지 않은 한) Qt 6 기반 애플리케이션에서 완전히 읽을 수 있습니다. 그러나 Qt 6으로 작성된 INI 파일은 "iniCodec"을 utf-8 텍스트 코덱으로 설정한 경우에만 이전 Qt 버전에서 읽을 수 있습니다.

registerFormat() 및 setPath()도 참조하십시오 .

QSettings::ReadFunc

다음 서명을 가진 함수에 대한 포인터를 입력합니다:

bool myReadFunc(QIODevice &device, QSettings::SettingsMap &map);

ReadFuncregisterFormat() 에서 키/값 쌍을 읽는 함수에 대한 포인터로 사용됩니다. ReadFunc 은 모든 옵션을 한 번에 읽고 처음에 비어 있는 SettingsMap 컨테이너의 모든 설정을 반환해야 합니다.

WriteFuncregisterFormat()도 참조하세요 .

enum QSettings::Scope

이 열거형은 설정을 사용자별로 지정할지 아니면 같은 시스템의 모든 사용자가 공유할지를 지정합니다.

Constant설명
QSettings::UserScope0현재 사용자와 관련된 특정 위치(예: 사용자의 홈 디렉터리)에 설정을 저장합니다.
QSettings::SystemScope1설정을 전역 위치에 저장하여 동일한 시스템의 모든 사용자가 동일한 설정 집합에 액세스할 수 있도록 합니다.

setPath()도 참조하세요 .

QSettings::SettingsMap

QMap<QString, QVariant>.

registerFormat()도 참조하세요 .

enum QSettings::Status

다음과 같은 상태 값을 사용할 수 있습니다:

상수설명
QSettings::NoError0오류가 발생하지 않았습니다.
QSettings::AccessError1액세스 오류가 발생했습니다(예: 읽기 전용 파일에 쓰려고 함).
QSettings::FormatError2형식 오류가 발생했습니다(예: 잘못된 INI 파일 로드).

status()도 참조하세요 .

QSettings::WriteFunc

다음 서명을 가진 함수에 대한 포인터를 입력합니다:

bool myWriteFunc(QIODevice &device, const QSettings::SettingsMap &map);

WriteFuncregisterFormat() 에서 키/값 쌍을 쓰는 함수에 대한 포인터로 사용됩니다. WriteFunc 은 한 번만 호출되므로 설정을 한 번에 출력해야 합니다.

ReadFuncregisterFormat()도 참조하세요 .

멤버 함수 문서

QVariant QSettings::value(QAnyStringView key) const

QVariant QSettings::value(QAnyStringView key, const QVariant &defaultValue) const

설정 값을 반환합니다 key. 설정이 존재하지 않으면 defaultValue 을 반환합니다.

기본값을 지정하지 않으면 기본값 QVariant 이 반환됩니다.

Windows 레지스트리 및 INI 파일은 대소문자를 구분하지 않는 키를 사용하는 반면, macOS 및 iOS의 CFPreferences API는 대소문자를 구분하는 키를 사용한다는 점에 유의하세요. 이식성 문제를 방지하려면 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

참고: 6.4 이전 Qt 버전에서 이 함수는 QAnyStringView 이 아닌 QString 을 사용했습니다.

setValue(), contains() 및 remove()도 참조하세요 .

[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 *부모)와 동일한 방식으로, 지정된 scope 을 사용하여 QSettings 객체를 구성합니다.

QSettings(QObject *부모)도 참조하십시오 .

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

fileName 이라는 파일에 저장된 설정에 액세스하기 위한 QSettings 객체를 parent 을 부모로 하여 생성합니다. 파일이 아직 존재하지 않으면 파일이 생성됩니다.

formatQSettings::NativeFormat 인 경우 fileName 의 의미는 플랫폼에 따라 다릅니다. Unix에서 fileName 는 INI 파일의 이름입니다. macOS 및 iOS에서 fileName.plist 파일의 이름입니다. Windows에서 fileName 는 시스템 레지스트리의 경로입니다.

formatQSettings::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 이라는 조직에서 application 이라는 애플리케이션의 설정에 액세스하고 parent 을 부모로 하는 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 객체를 구성합니다.

scopeQSettings::UserScope 인 경우 QSettings 개체는 시스템 전체 설정을 검색하기 전에 사용자별 설정을 먼저 검색한 다음 폴백으로 시스템 전체 설정을 검색합니다. scopeQSettings::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 객체를 구성합니다.

scopeQSettings::UserScope 인 경우 QSettings 개체는 시스템 전체 설정을 검색하기 전에 사용자별 설정을 먼저 검색한 다음 폴백으로 시스템 전체 설정을 검색합니다. scopeQSettings::SystemScope 인 경우 QSettings 개체는 사용자별 설정을 무시하고 시스템 전체 설정에 대한 액세스를 제공합니다.

formatQSettings::NativeFormat 인 경우 기본 API가 설정을 저장하는 데 사용됩니다. formatQSettings::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("fullScreen", win->isFullScreen());
settings.endGroup();

settings.beginGroup("outputpanel");
settings.setValue("visible", panel->isVisible());
settings.endGroup();

이렇게 하면 세 가지 설정 값이 설정됩니다:

  • mainwindow/size
  • mainwindow/fullScreen
  • outputpanel/visible

endGroup()를 호출하여 현재 그룹을 해당 시작 그룹() 호출 이전으로 재설정합니다. 그룹은 중첩될 수 있습니다.

참고: 6.4 이전 Qt 버전에서는 이 함수가 QAnyStringView 이 아닌 QString 을 사용했습니다.

endGroup() 및 group()도 참조하세요 .

int QSettings::beginReadArray(QAnyStringView prefix)

prefix 을 현재 그룹에 추가하고 배열에서 읽기를 시작합니다. 배열의 크기를 반환합니다.

예시:

struct Login {
    QString userName;
    QString password;
};
QList<Login> logins;
...

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()를 사용하여 배열을 처음에 씁니다.

참고: 6.4 이전 Qt 버전에서 이 함수는 QAnyStringView 이 아닌 QString 을 받습니다.

beginWriteArray(), endArray() 및 setArrayIndex()도 참조하세요 .

void QSettings::beginWriteArray(QAnyStringView prefix, int size = -1)

prefix 을 현재 그룹에 추가하고 size 크기의 배열을 쓰기 시작합니다. size 이 -1(기본값)인 경우, 작성된 항목의 인덱스에 따라 자동으로 결정됩니다.

특정 키 집합이 많이 발생하는 경우 배열을 사용하여 작업을 더 쉽게 할 수 있습니다. 예를 들어 사용자 이름과 비밀번호의 가변 길이 목록을 저장하고 싶다고 가정해 봅시다. 그런 다음 작성할 수 있습니다:

struct Login {
    QString userName;
    QString password;
};
QList<Login> logins;
...

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/size
  • logins/1/userName
  • logins/1/password
  • logins/2/userName
  • logins/2/password
  • logins/3/userName
  • logins/3/password
  • ...

배열을 다시 읽으려면 beginReadArray()를 사용합니다.

참고: 6.4 이전 Qt 버전에서 이 함수는 QAnyStringView 이 아닌 QString 을 사용했습니다.

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()를 사용하여 그룹을 설정한 경우 그룹 접두사 없이 해당 그룹의 최상위 키가 반환됩니다.

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 은 해당 그룹에 상대적인 것으로 간주됩니다.

Windows 레지스트리 및 INI 파일은 대소문자를 구분하지 않는 키를 사용하는 반면, macOS 및 iOS의 CFPreferences API는 대소문자를 구분하는 키를 사용한다는 점에 유의하세요. 이식성 문제를 방지하려면 Section and Key Syntax 규칙을 참조하세요.

참고: 6.4 이전 Qt 버전에서는 이 함수가 QAnyStringView 이 아닌 QString 을 사용했습니다.

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 을 반환합니다.

QSettings 가 읽기 전용 파일에서 작동하는 경우 isWritable()이 false를 반환할 수 있습니다.

경고: 파일 권한은 언제든지 변경될 수 있으므로 이 함수는 완벽하게 신뢰할 수 없습니다.

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 은 포맷에 연결된 파일 확장자입니다('.' 제외).

readFuncwriteFunc 매개 변수는 키/값 쌍을 읽고 쓰는 함수에 대한 포인터입니다. 읽기 및 쓰기 함수에 대한 QIODevice 매개변수는 항상 바이너리 모드(즉, QIODeviceBase::Text 플래그 없이)로 열립니다.

caseSensitivity 매개변수는 키의 대소문자 구분 여부를 지정합니다. 이는 QSettings 을 사용하여 값을 조회할 때 차이를 만듭니다. 기본값은 대소문자를 구분합니다.

기본적으로 조직 이름과 애플리케이션 이름으로 작동하는 생성자 중 하나를 사용하는 경우 사용되는 파일 시스템 위치는 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");
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");
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"]

Windows 레지스트리 및 INI 파일은 대소문자를 구분하지 않는 키를 사용하는 반면, macOS 및 iOS의 CFPreferences API는 대소문자를 구분하는 키를 사용한다는 점에 유의하세요. 이식성 문제를 방지하려면 Section and Key Syntax 규칙을 참조하세요.

참고: 6.4 이전 Qt 버전에서는 이 함수가 QAnyStringView 이 아닌 QString 을 사용했습니다.

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 대체 데이터 스트림과 같은 특정 조건에서는 반드시 필요합니다.

이 기능에 대한 자세한 내용은 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)

지정된 formatscope 에 대한 설정을 저장하는 데 사용되는 경로를 path 로 설정합니다. format 은 사용자 지정 형식일 수 있습니다.

아래 표에는 기본값이 요약되어 있습니다:

플랫폼형식범위경로
WindowsIniFormatUserScopeFOLDERID_RoamingAppData
SystemScopeFOLDERID_ProgramData
UnixNativeFormat, IniFormatUserScope$HOME/.config
SystemScope/etc/xdg
macOS 및 iOSIniFormatUserScope$HOME/.config
SystemScope/etc/xdg

Unix, macOS 및 iOS의 기본 UserScope 경로($HOME/.config 또는 $HOME/Settings)는 사용자가 XDG_CONFIG_HOME 환경 변수를 설정하여 재정의할 수 있습니다. Unix, macOS 및 iOS의 기본 SystemScope 경로(/etc/xdg)는 Qt 라이브러리를 빌드할 때 configure 스크립트의 -sysconfdir 플래그를 사용하여 재정의할 수 있습니다(자세한 내용은 QLibraryInfo 참조).

Windows, macOS 및 iOS에서 NativeFormat 경로를 설정해도 아무런 효과가 없습니다.

경고: 이 함수는 기존 QSettings 객체에는 영향을 미치지 않습니다.

registerFormat()도 참조하세요 .

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

key 설정 값을 value 으로 설정합니다. key 이 이미 존재하는 경우 이전 값을 덮어씁니다.

Windows 레지스트리 및 INI 파일은 대소문자를 구분하지 않는 키를 사용하는 반면, macOS 및 iOS의 CFPreferences API는 대소문자를 구분하는 키를 사용한다는 점에 유의하세요. 이식성 문제를 방지하려면 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

참고: 6.4 이전 Qt 버전에서 이 함수는 QAnyStringView 이 아닌 QString 을 사용했습니다.

value(), remove() 및 contains()도 참조하세요 .

QSettings::Status QSettings::status() const

QSettings 또는 오류가 발생하지 않은 경우 QSettings::NoError 에서 처음 발생한 오류를 나타내는 상태 코드를 반환합니다.

QSettings 은 일부 작업 수행을 지연시킨다는 점에 유의하세요. 따라서 status()를 호출하기 전에 sync()를 호출하여 QSettings 에 저장된 데이터가 디스크에 기록되었는지 확인하는 것이 좋습니다.

sync()도 참조하세요 .

void QSettings::sync()

저장되지 않은 변경 사항을 영구 저장소에 쓰고 그 사이에 다른 애플리케이션에서 변경한 설정을 다시 로드합니다.

이 함수는 QSettings 의 소멸자 및 이벤트 루프에서 일정 간격으로 자동으로 호출되므로 일반적으로 직접 호출할 필요가 없습니다.

status()도 참조하세요 .

© 2025 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.