このページでは

QSettings Class

QSettings クラスは、プラットフォームに依存しない永続的なアプリケーション設定を提供します。詳細...

ヘッダー: #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 ではプロパティリストファイルに保存されることがよくあります。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()に2番目の引数を渡すことで、別のデフォルト値を指定できます:

    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 への変換)は、GUI 関連の型を含め、QVariant でサポートされているすべてのデータ型に対して自動的に行われます:

QSettings settings("MySoft", "Star Runner");
QColor color = QColor(Qt::blue);
settings.setValue("DataPump/bgcolor", color);

qRegisterMetaType() を使用して登録され、QDataStream との間でデータをストリーミングするための演算子を持つカスタム型は、QSettings を使用して保存できます。

セクションおよびキーの構文

設定キーには、任意のUnicode文字を含めることができます。大文字と小文字の区別があるかどうかは、ファイル形式およびオペレーティングシステムによって決まります。Windowsでは、レジストリおよびINIファイルは大文字と小文字を区別しないキーを使用しますが、registerFormat()で登録されたユーザー指定の形式については、区別がある場合も、ない場合もあります。Unixシステムでは、キーは大文字と小文字を常に区別します。

移植性の問題を避けるために、以下の簡単なルールに従ってください:

  1. 同じキーを参照する際は、常に同じ大文字小文字の区別を使用してください。たとえば、コードのある箇所でキーを「text fonts」として参照している場合、別の箇所で「Text Fonts」として参照しないでください。
  2. 大文字と小文字の違い以外は同一であるキー名は避けてください。たとえば、「MainWindow」というキーがある場合、「mainwindow」という名前の別のキーを保存しようとしないでください。
  3. セクション名やキー名にスラッシュ('/' および '\')を使用しないでください。バックスラッシュ文字はサブキーを区切るために使用されます(後述)。Windows では、'\' は 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. Star Runner アプリケーションのシステム全体の場所
  4. MySoft によるすべてのアプリケーションのシステム全体の保存場所

(Qtがサポートする各プラットフォームにおけるこれらの場所の詳細については、以下のPlatform-Specific Notes を参照してください。)

最初の保存場所にキーが見つからない場合、検索は 2 番目の保存場所へと進み、以下同様に続きます。これにより、システム全体または組織全体の設定を保存し、ユーザーごとやアプリケーションごとにそれらを上書きすることが可能になります。この仕組みを無効にするには、setFallbacksEnabled(false) を呼び出してください。

4つの場所すべてのキーは読み取り可能ですが、書き込みが可能なのは最初のファイル(当該アプリケーションのユーザー固有の場所)のみです。他のファイルに書き込むには、アプリケーション名を省略するか、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() 関数は、次のように、メインウィンドウのコンストラクタおよび close イベントハンドラから呼び出す必要があります。

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 ファイルを直接読み取りたい場合は、ファイル名を最初の引数として受け取り、2 番目の引数として `QSettings::IniFormat ` を渡す QSettings コンストラクタを使用できます。例:

QSettings settings("/home/petra/misc/myapp.ini",
                QSettings::IniFormat);

その後、QSettings オブジェクトを使用して、ファイル内の設定を読み書きすることができます。

macOSおよびiOSでは、2番目の引数に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文字を超えてはなりません。これらの制限を回避する1つの方法は、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)では、rootのみがアクセス可能です。ただし、10.9(Mavericks)ではこのルールが再び変更されましたが、ネイティブ形式(plistファイル)にのみ適用されます。

セキュリティ上の考慮事項

このクラスは、QDataStream を使用してデータをQVariant にデシリアライズします。したがって、security consideration as QDataStream と同じリスクがあり、信頼できる入力に対してのみ使用すべきです。

QVariant およびQSessionManagerも参照してください 。

メンバ型のドキュメント

enum QSettings::Format

この列挙型は、QSettings で使用される保存形式を指定します。

定数定数値説明
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に保存します。Cookieが許可されていない場合、INI形式にフォールバックします。これにより、オリジンごとに最大5MiBのストレージが提供されますが、アクセスは同期式であり、JSPIは不要です。
QSettings::WebIndexedDBFormat5WASMのみ:設定を現在のオリジン用のIndexedDBに保存します。Cookieが許可されていない場合、INI形式にフォールバックします。これにはJSPIが必要ですが、WebLocalStorageFormatよりも多くのストレージを提供します。
QSettings::InvalidFormat16registerFormat() によって返される特別な値。

Unix 環境では、NativeFormat と IniFormat は、ファイル拡張子が異なる点(NativeFormat では.conf 、IniFormat では.ini )を除き、同じ意味を持ちます。

INIファイル形式は、QtがすべてのプラットフォームでサポートしているWindowsのファイル形式です。INIの標準規格が存在しないため、QtではMicrosoftの仕様に従うよう努めていますが、以下の例外があります:

  • QVariant からQString へ変換できない型(例:QPoint 、QRect 、QSize )を保存する場合、Qt はその型をエンコードするために@ に基づく構文を使用します。例えば:
    pos = @QPoint(100 100)

    互換性の問題を最小限に抑えるため、値の先頭に来ない、またはその後に Qt 型(Point 、Rect 、Size など)が続かない `@ ` は、通常の文字として扱われます。

  • INI ファイルではバックスラッシュは特殊文字ですが、ほとんどの Windows アプリケーションはファイルパス内のバックスラッシュ (\) をエスケープしません:
    windir = C:\Windows

    QSettings は常にバックスラッシュを特殊文字として扱い、そのようなエントリを読み書きするための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:

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

ReadFunc registerFormat() では、一連のキー/値ペアを読み込む関数へのポインタとして使用されます。 は、1回の処理ですべてのオプションを読み込み、初期状態では空である コンテナにすべての設定を格納して返す必要があります。ReadFunc SettingsMap

WriteFunc およびregisterFormat()も参照してください 。

enum QSettings::Scope

この列挙型は、設定がユーザー固有のものか、同じシステムのすべてのユーザーで共有されるものかを指定します。

定数値説明
QSettings::UserScope0設定を現在のユーザー固有の場所(たとえば、ユーザーのホームディレクトリなど)に保存します。
QSettings::SystemScope1設定をグローバルな場所に保存し、同じマシン上のすべてのユーザーが同じ設定セットにアクセスできるようにします。

関連項目: setPath()。

QSettings::SettingsMap

QMap<QString,QVariant> のtypedef。

registerFormat()も参照してください 。

enum QSettings::Status

以下のステータス値が考えられます:

定数値説明
QSettings::NoError0エラーは発生しませんでした。
QSettings::AccessError1アクセスエラーが発生しました(例:読み取り専用ファイルへの書き込みを試みた場合など)。
QSettings::FormatError2フォーマットエラーが発生しました(例:形式が不正な INI ファイルを読み込んだ場合)。

関連項目: status()。

QSettings::WriteFunc

以下のシグネチャを持つ関数へのポインタのtypedef:

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

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 の意味はプラットフォームによって異なります。Unix では、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();

これにより、3つの設定値が設定されます:

  • mainwindow/size
  • mainwindow/active
  • outputpanel/visible

endGroup() を呼び出すと、現在のグループが、対応する beginGroup() の呼び出し前の状態に戻ります。グループはネスト可能です。

注: Qt 6.4以前のバージョンでは 、この関数は `QString` を受け取り、`QAnyStringView` ではありませんでした。

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/size
  • logins/1/userName
  • logins/1/password
  • logins/2/userName
  • logins/2/password
  • logins/3/userName
  • logins/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 以前のバージョンでは 、この関数は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 ` を返します。

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 を使用して値を検索する際に影響します。デフォルトでは大文字小文字が区別されます。Unixシステムでは、このパラメータは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 代替データストリームなど、特定の状況ではこのオプションが必要となります。

この機能の詳細については、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 は、任意の形式に指定できます。

以下の表にデフォルト値をまとめます:

プラットフォーム形式スコープパス
WindowsIniFormatUserScopeFOLDERID_RoamingAppData
SystemScopeFOLDERID_ProgramData
UnixNativeFormat,IniFormatUserScope$HOME/.config ($XDG_CONFIG_HOME)
SystemScope/etc/xdg
macOSIniFormatUserScope$HOME/.config ($XDG_CONFIG_HOME)
SystemScope/Library/Preferences/Qt
iOSIniFormatUserScope$HOME/Library/Preferences
SystemScope/Library/Preferences/Qt
macOS および iOSNativeFormatUserScope$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` を受け取っていました。

関連項目: setValue()、contains()、およびremove()。

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