Sur cette page

QSettings Class

La classe QSettings fournit des paramètres d'application persistants et indépendants de la plate-forme. Plus d'informations...

En-tête : #include <QSettings>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Héritages : QObject

Remarque : toutes les fonctions de cette classe sont réentrantes.

Remarque : Ces fonctions sont également sûres pour les threads:

  • registerFormat(const QString &extension, QSettings::ReadFunc readFunc, QSettings::WriteFunc writeFunc, Qt::CaseSensitivity caseSensitivity)

Types publics

enum Format { NativeFormat, Registry32Format, Registry64Format, IniFormat, WebLocalStorageFormat, …, InvalidFormat }
ReadFunc
enum Scope { UserScope, SystemScope }
SettingsMap
enum Status { NoError, AccessError, FormatError }
WriteFunc

Fonctions publiques

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

Membres publics statiques

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)

Fonctions protégées réimplémentées

virtual bool event(QEvent *event) override

Description détaillée

Les utilisateurs s'attendent normalement à ce qu'une application se souvienne de ses paramètres (taille et position des fenêtres, options, etc.) d'une session à l'autre. Ces informations sont souvent stockées dans le registre du système sous Windows, et dans des fichiers de liste de propriétés sous macOS et iOS. Sur les systèmes Unix, en l'absence de norme, de nombreuses applications (y compris les applications KDE) utilisent des fichiers texte INI.

QSettings est une abstraction autour de ces technologies, vous permettant de sauvegarder et de restaurer les paramètres de l'application de manière portable. Il prend également en charge custom storage formats.

L'API de QSettings est basée sur QVariant, ce qui vous permet de sauvegarder la plupart des types basés sur des valeurs, tels que QString, QRect, et QImage, avec un minimum d'effort.

Si vous n'avez besoin que d'une structure non persistante basée sur la mémoire, vous pouvez utiliser QMap<QString, QVariant> à la place.

Utilisation de base

Lors de la création d'un objet QSettings, vous devez transmettre le nom de votre entreprise ou de votre organisation ainsi que le nom de votre application. Par exemple, si votre produit s'appelle Star Runner et que votre société s'appelle MySoft, vous devez construire l'objet QSettings comme suit :

    QSettings settings("MySoft", "Star Runner");

Les objets QSettings peuvent être créés soit sur la pile, soit sur le tas (c'est-à-dire en utilisant new). La construction et la destruction d'un objet QSettings sont très rapides.

Si vous utilisez les QSettings à plusieurs endroits dans votre application, vous voudrez peut-être spécifier le nom de l'organisation et le nom de l'application en utilisant QCoreApplication::setOrganizationName() et QCoreApplication::setApplicationName(), puis utiliser le constructeur par défaut des QSettings :

    QCoreApplication::setOrganizationName("MySoft");
    QCoreApplication::setOrganizationDomain("mysoft.com");
    QCoreApplication::setApplicationName("Star Runner");
    ...
    QSettings settings;

(Ici, nous spécifions également le domaine Internet de l'organisation. Lorsque le domaine Internet est défini, il est utilisé sur macOS et iOS à la place du nom de l'organisation, puisque les applications macOS et iOS utilisent conventionnellement les domaines Internet pour s'identifier. Si aucun domaine n'est défini, un faux domaine est dérivé du nom de l'organisation. Voir Platform-Specific Notes ci-dessous pour plus de détails).

QSettings stocke les paramètres. Chaque paramètre se compose d'un QString qui spécifie le nom du paramètre (la clé) et d'un QVariant qui stocke les données associées à la clé. Pour écrire un paramètre, utilisez setValue(). Par exemple :

    settings.setValue("editor/wrapMargin", 68);

S'il existe déjà un paramètre avec la même clé, la valeur existante est remplacée par la nouvelle valeur. Pour des raisons d'efficacité, il se peut que les modifications ne soient pas enregistrées immédiatement dans la mémoire permanente. (Vous pouvez toujours appeler sync() pour valider vos modifications).

Vous pouvez récupérer la valeur d'un paramètre en utilisant value() :

    int margin = settings.value("editor/wrapMargin").toInt();

S'il n'existe pas de paramètre portant le nom spécifié, QSettings renvoie une valeur nulle QVariant (qui peut être convertie en un entier 0). Vous pouvez spécifier une autre valeur par défaut en passant un second argument à value() :

    int margin = settings.value("editor/wrapMargin", 80).toInt();

Pour vérifier si une clé donnée existe, appelez contains(). Pour supprimer le paramètre associé à une clé, appelez remove(). Pour obtenir la liste de toutes les clés, appelez allKeys(). Pour supprimer toutes les clés, appelez clear().

Types QVariant et GUI

Comme QVariant fait partie du module Qt Core, il ne peut pas fournir de fonctions de conversion vers des types de données tels que QColor, QImage et QPixmap, qui font partie de Qt GUI. En d'autres termes, il n'y a pas de fonctions toColor(), toImage() ou toPixmap() dans QVariant.

À la place, vous pouvez utiliser la fonction modèle QVariant::value(). Par exemple, la conversion inverse (p. ex :

QSettings settings("MySoft", "Star Runner");
QColor color = settings.value("DataPump/bgcolor").value<QColor>();

La conversion inverse (par exemple, de QColor à QVariant) est automatique pour tous les types de données pris en charge par QVariant, y compris les types liés à l'interface graphique :

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

Les types personnalisés enregistrés à l'aide de qRegisterMetaType() qui ont des opérateurs pour le flux vers et depuis un QDataStream peuvent être stockés à l'aide de QSettings.

Syntaxe des sections et des clés

Les clés de paramétrage peuvent contenir n'importe quel caractère Unicode. Le format de fichier et le système d'exploitation déterminent s'ils sont sensibles à la casse ou non. Sous Windows, le registre et les fichiers INI utilisent des clés insensibles à la casse, tandis que les formats spécifiés par l'utilisateur et enregistrés à l'aide de registerFormat() peuvent être sensibles à la casse. Sur les systèmes Unix, les clés sont toujours sensibles à la casse.

Pour éviter les problèmes de portabilité, suivez ces règles simples :

  1. Faites toujours référence à la même clé en utilisant la même casse. Par exemple, si vous appelez une clé "polices de texte" à un endroit de votre code, ne l'appelez pas "polices de texte" à un autre endroit.
  2. Évitez les noms de clés identiques, à l'exception de la casse. Par exemple, si vous avez une clé appelée "MainWindow", n'essayez pas d'enregistrer une autre clé sous le nom de "mainwindow".
  3. N'utilisez pas de barre oblique ('/' et '\') dans les noms de section ou de clé ; la barre oblique inverse est utilisée pour séparer les sous-clés (voir ci-dessous). Sur les fenêtres, '\' est converti par QSettings en '/', ce qui les rend identiques.

Vous pouvez former des clés hiérarchiques en utilisant le caractère "/" comme séparateur, comme dans les chemins d'accès aux fichiers sous Unix. Par exemple, si vous souhaitez sauvegarder ou restaurer de nombreux fichiers, vous pouvez utiliser le caractère '/' :

    settings.setValue("mainwindow/size", win->size());
    settings.setValue("mainwindow/fullScreen", win->isFullScreen());
    settings.setValue("outputpanel/visible", panel->isVisible());

Si vous souhaitez enregistrer ou restaurer plusieurs paramètres avec le même préfixe, vous pouvez spécifier le préfixe en utilisant beginGroup() et appeler endGroup() à la fin. Voici le même exemple, mais cette fois-ci en utilisant le mécanisme de groupe :

    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();

Si un groupe est défini à l'aide de beginGroup(), le comportement de la plupart des fonctions change en conséquence. Les groupes peuvent être définis de manière récursive.

Outre les groupes, QSettings prend également en charge le concept de "tableau". Voir beginReadArray() et beginWriteArray() pour plus de détails.

Mécanisme de repli

Supposons que vous ayez créé un objet QSettings avec le nom de l'organisation MySoft et le nom de l'application Star Runner. Lorsque vous recherchez une valeur, jusqu'à quatre emplacements sont recherchés dans cet ordre :

  1. un emplacement spécifique à l'utilisateur pour l'application Star Runner
  2. un emplacement spécifique à l'utilisateur pour toutes les applications de MySoft
  3. l'emplacement du système dans son ensemble pour l'application Star Runner
  4. l'emplacement de l'ensemble du système pour toutes les applications de MySoft.

(Voir Platform-Specific Notes ci-dessous pour des informations sur la nature de ces emplacements sur les différentes plates-formes prises en charge par Qt Location).

Si une clé ne peut être trouvée dans le premier emplacement, la recherche se poursuit dans le deuxième emplacement, et ainsi de suite. Cela vous permet de stocker des paramètres à l'échelle du système ou de l'organisation et de les modifier par utilisateur ou par application. Pour désactiver ce mécanisme, appelez setFallbacksEnabled(false).

Bien que les clés des quatre emplacements soient disponibles en lecture, seul le premier fichier (l'emplacement spécifique à l'utilisateur pour l'application en question) est accessible en écriture. Pour écrire dans l'un des autres fichiers, omettez le nom de l'application et/ou spécifiez QSettings::SystemScope (par opposition à QSettings::UserScope, la valeur par défaut).

Voyons cela à l'aide d'un exemple :

    QSettings obj1("MySoft", "Star Runner");
    QSettings obj2("MySoft");
    QSettings obj3(QSettings::SystemScope, "MySoft", "Star Runner");
    QSettings obj4(QSettings::SystemScope, "MySoft");

Le tableau ci-dessous résume quels objets QSettings accèdent à quel emplacement. "X" signifie que l'emplacement est l'emplacement principal associé à l'objet QSettings et qu'il est utilisé à la fois pour la lecture et pour l'écriture ; "o" signifie que l'emplacement est utilisé comme repli lors de la lecture.

Emplacementsobj1obj2obj3obj4
1. Utilisateur, applicationX
2. Utilisateur, OrganisationoX
3. Système, applicationoX
4. Système, organisationoooX

La beauté de ce mécanisme est qu'il fonctionne sur toutes les plates-formes supportées par Qt et qu'il vous donne encore beaucoup de flexibilité, sans vous obliger à spécifier des noms de fichiers ou des chemins d'accès au registre.

Si vous souhaitez utiliser des fichiers INI sur toutes les plateformes au lieu de l'API native, vous pouvez passer QSettings::IniFormat comme premier argument au constructeur de QSettings, suivi de la portée, du nom de l'organisation et du nom de l'application :

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

Notez que les fichiers INI ne font pas la distinction entre les données numériques et les chaînes de caractères utilisées pour les coder, de sorte que les valeurs écrites sous forme de nombres seront lues sous la forme QString. La valeur numérique peut être récupérée à l'aide de QString::toInt(), QString::toDouble() et des fonctions connexes.

Restauration de l'état d'une application GUI

QSettings est souvent utilisé pour stocker l'état d'une application GUI. L'exemple suivant montre comment utiliser QSettings pour enregistrer et restaurer la géométrie de la fenêtre principale d'une application.

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();
}

Voir Géométrie de la fenêtre pour savoir pourquoi il est préférable d'appeler QWidget::resize() et QWidget::move() plutôt que QWidget::setGeometry() pour restaurer la géométrie d'une fenêtre.

Les fonctions readSettings() et writeSettings() doivent être appelées à partir du constructeur de la fenêtre principale et du gestionnaire d'événement de fermeture comme suit :

MainWindow::MainWindow()
{
    ...
    readSettings();
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    if (userReallyWantsToQuit()) {
        writeSettings();
        event->accept();
    } else {
        event->ignore();
    }
}

Accès aux paramètres à partir de plusieurs threads ou processus simultanément

QSettings est réentrant. Cela signifie que vous pouvez utiliser simultanément des objets QSettings distincts dans différents threads. Cette garantie est valable même lorsque les objets QSettings font référence aux mêmes fichiers sur le disque (ou aux mêmes entrées dans le registre du système). Si un paramètre est modifié par un objet QSettings, le changement sera immédiatement visible dans tous les autres objets QSettings qui opèrent au même endroit et qui vivent dans le même processus.

QSettings peut être utilisé en toute sécurité à partir de différents processus (qui peuvent être différentes instances de votre application fonctionnant en même temps ou différentes applications) pour lire et écrire sur les mêmes emplacements du système, à condition que certaines conditions soient remplies. Pour QSettings::IniFormat, il utilise un verrouillage consultatif des fichiers et un algorithme de fusion intelligent pour garantir l'intégrité des données. Pour que cela fonctionne, il faut que le fichier de configuration accessible en écriture soit un fichier normal et qu'il réside dans un répertoire dans lequel l'utilisateur actuel peut créer de nouveaux fichiers temporaires. Si ce n'est pas le cas, il faut utiliser setAtomicSyncRequired() pour désactiver la sécurité.

Notez que sync() importe les modifications apportées par d'autres processus (en plus d'écrire les modifications de ce QSettings).

Notes spécifiques à la plate-forme

Emplacements où sont stockés les paramètres de l'application

Comme indiqué dans la section Fallback Mechanism, QSettings stocke les paramètres d'une application à quatre endroits maximum, selon que les paramètres sont propres à l'utilisateur ou à l'ensemble du système, et selon que les paramètres sont propres à l'application ou à l'ensemble de l'organisation. Pour simplifier, nous supposons que l'organisation s'appelle MySoft et que l'application s'appelle Star Runner.

Sur les systèmes Unix, si le format de fichier est NativeFormat, les fichiers suivants sont utilisés par défaut :

  1. $HOME/.config/MySoft/Star Runner.conf
  2. $HOME/.config/MySoft.conf
  3. pour chaque répertoire <dir> dans $XDG_CONFIG_DIRS : <dir>/MySoft/Star Runner.conf
  4. pour chaque répertoire <dir> dans $XDG_CONFIG_DIRS : <dir>/MySoft.conf

Remarque : si XDG_CONFIG_DIRS n'est pas défini, la valeur par défaut de /etc/xdg est utilisée.

Sur macOS et iOS, si le format de fichier est NativeFormat, ces fichiers sont utilisés par défaut :

  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

Sous Windows, les paramètres de NativeFormat sont stockés dans les chemins d'accès au registre suivants :

  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

Remarque : sous Windows, pour les programmes 32 bits fonctionnant en mode WOW64, les paramètres sont stockés dans le chemin de registre suivant : HKEY_LOCAL_MACHINE\Software\WOW6432node.

Si le format de fichier est NativeFormat, il s'agit de "Settings/MySoft/Star Runner.conf" dans le répertoire d'origine de l'application.

Si le format de fichier est IniFormat, les fichiers suivants sont utilisés sur Unix, macOS et iOS :

  1. $HOME/.config/MySoft/Star Runner.ini
  2. $HOME/.config/MySoft.ini
  3. pour chaque répertoire <dir> dans $XDG_CONFIG_DIRS : <dir>/MySoft/Star Runner.ini
  4. pour chaque répertoire <dir> dans $XDG_CONFIG_DIRS : <dir>/MySoft.ini

Remarque : si XDG_CONFIG_DIRS n'est pas défini, la valeur par défaut de /etc/xdg est utilisée.

Sous Windows, les fichiers suivants sont utilisés :

  1. FOLDERID_RoamingAppData\MySoft\Star Runner.ini
  2. FOLDERID_RoamingAppData\MySoft.ini
  3. FOLDERID_ProgramData\MySoft\Star Runner.ini
  4. FOLDERID_ProgramData\MySoft.ini

Les identifiants précédés de FOLDERID_ sont des listes d'ID d'éléments spéciaux à transmettre à la fonction API Win32 SHGetKnownFolderPath() pour obtenir le chemin d'accès correspondant.

FOLDERID_RoamingAppData pointe généralement vers C:\Users\User Name\AppData\Roamingqui est également indiqué par la variable d'environnement %APPDATA%.

FOLDERID_ProgramData pointe généralement vers C:\ProgramData.

Si le format de fichier est IniFormat, il s'agit de "Settings/MySoft/Star Runner.ini" dans le répertoire personnel de l'application.

Les chemins d'accès aux fichiers .ini et .conf peuvent être modifiés à l'aide de setPath(). Sous Unix, macOS et iOS, l'utilisateur peut les remplacer en définissant la variable d'environnement XDG_CONFIG_HOME; voir setPath() pour plus de détails.

Accès direct aux fichiers INI et .plist

Il arrive que vous souhaitiez accéder à des paramètres stockés dans un fichier spécifique ou dans un chemin d'accès au registre. Sur toutes les plateformes, si vous souhaitez lire un fichier INI directement, vous pouvez utiliser le constructeur QSettings qui prend un nom de fichier comme premier argument et transmet QSettings::IniFormat comme second argument. Par exemple, vous pouvez utiliser le constructeur QSettings pour lire un fichier INI :

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

Vous pouvez ensuite utiliser l'objet QSettings pour lire et écrire les paramètres dans le fichier.

Sur macOS et iOS, vous pouvez accéder aux fichiers de la liste de propriétés .plist en passant QSettings::NativeFormat comme deuxième argument. En voici un exemple :

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

Accès direct au registre Windows

Sous Windows, QSettings vous permet d'accéder aux paramètres qui ont été écrits avec QSettings (ou aux paramètres dans un format pris en charge, par exemple, des données de chaîne) dans le registre du système. Pour ce faire, vous devez construire un objet QSettings avec un chemin d'accès au registre et QSettings::NativeFormat.

Par exemple :

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

Toutes les entrées du registre qui apparaissent sous le chemin spécifié peuvent être lues ou écrites par l'objet QSettings comme d'habitude (en utilisant des barres obliques avant au lieu de barres obliques arrière). Par exemple :

settings.setValue("11.0/Outlook/Security/DontTrustInstalledFiles", 0);

Notez que le caractère barre oblique inverse est, comme indiqué, utilisé par QSettings pour séparer les sous-clés. Par conséquent, vous ne pouvez pas lire ou écrire des entrées de registre Windows qui contiennent des barres obliques ou des barres obliques inverses ; vous devez utiliser une API Windows native si vous avez besoin de le faire.

Accès aux paramètres courants du registre sous Windows

Sous Windows, une clé peut avoir une valeur et des sous-clés. On accède à sa valeur par défaut en utilisant "Default" ou "." à la place d'une sous-clé :

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"

Sur d'autres plateformes que Windows, "Défaut" et "." seraient traités comme des sous-clés normales.

Limites de la plate-forme

Bien que QSettings tente d'aplanir les différences entre les différentes plates-formes prises en charge, il existe encore quelques différences dont vous devez tenir compte lors du portage de votre application :

  • Le registre du système Windows présente les limitations suivantes : Une sous-clé ne peut pas dépasser 255 caractères, la valeur d'une entrée ne peut pas dépasser 16 383 caractères et toutes les valeurs d'une clé ne peuvent pas dépasser 65 535 caractères. Une façon de contourner ces limitations consiste à stocker les paramètres à l'aide de IniFormat au lieu de NativeFormat.
  • Sous Windows, lorsque le registre du système Windows est utilisé, QSettings ne préserve pas le type original de la valeur. Par conséquent, le type de la valeur peut changer lorsqu'une nouvelle valeur est définie. Par exemple, une valeur de type REG_EXPAND_SZ sera remplacée par REG_SZ.
  • Sur macOS et iOS, allKeys() renvoie des clés supplémentaires pour les paramètres globaux qui s'appliquent à toutes les applications. Ces clés peuvent être lues à l'aide de value(), mais elles ne peuvent pas être modifiées, elles sont seulement masquées. L'appel à setFallbacksEnabled(false) masquera ces paramètres globaux.
  • Sur macOS et iOS, l'API CFPreferences utilisée par QSettings attend des noms de domaine Internet plutôt que des noms d'organisation. Pour fournir une API uniforme, QSettings dérive un faux nom de domaine à partir du nom de l'organisation (sauf si le nom de l'organisation est déjà un nom de domaine, par exemple OpenOffice.org). L'algorithme ajoute ".com" au nom de l'entreprise et remplace les espaces et autres caractères illégaux par des traits d'union. Si vous souhaitez spécifier un nom de domaine différent, appelez QCoreApplication::setOrganizationDomain(), QCoreApplication::setOrganizationName() et QCoreApplication::setApplicationName() dans votre fonction main(), puis utilisez le constructeur QSettings par défaut. Une autre solution consiste à utiliser des directives de préprocesseur, par exemple :
    #ifdef Q_OS_DARWIN
        QSettings settings("grenoullelogique.fr", "Squash");
    #else
        QSettings settings("Grenoulle Logique", "Squash");
    #endif
  • Sur macOS, les autorisations d'accès aux paramètres n'appartenant pas à l'utilisateur actuel (c'est-à-dire SystemScope) ont changé avec la version 10.7 (Lion). Avant cette version, les utilisateurs disposant de droits d'administrateur pouvaient y accéder. Pour les versions 10.7 et 10.8 (Mountain Lion), seul l'utilisateur root peut y accéder. Cependant, la version 10.9 (Mavericks) modifie à nouveau cette règle, mais uniquement pour le format natif (fichiers plist).

Voir également QVariant et QSessionManager.

Documentation sur les types de membres

enum QSettings::Format

Ce type d'énumération spécifie le format de stockage utilisé par QSettings.

ConstanteValeurDescription
QSettings::NativeFormat0Stocker les paramètres en utilisant le format de stockage le plus approprié pour la plateforme. Sous Windows, il s'agit du registre du système ; sous macOS et iOS, il s'agit de l'API CFPreferences ; sous Unix, il s'agit de fichiers de configuration textuels au format INI.
QSettings::Registry32Format2Windows uniquement : Accéder explicitement au registre système 32 bits à partir d'une application 64 bits fonctionnant sous Windows 64 bits. Sur Windows 32 bits ou à partir d'une application 32 bits sur Windows 64 bits, cela fonctionne de la même manière que la spécification de NativeFormat. Cette valeur enum a été ajoutée dans Qt 5.7.
QSettings::Registry64Format3Windows uniquement : Accéder explicitement au registre du système 64 bits à partir d'une application 32 bits fonctionnant sous Windows 64 bits. Sur Windows 32 bits ou à partir d'une application 64 bits sur Windows 64 bits, cela fonctionne de la même manière qu'en spécifiant NativeFormat. Cette valeur enum a été ajoutée dans Qt 5.7.
QSettings::IniFormat1Stocker les paramètres dans des fichiers INI. Notez que les fichiers INI ne font pas la distinction entre les données numériques et les chaînes de caractères utilisées pour les encoder, de sorte que les valeurs écrites sous forme de nombres seront relues sous la forme QString.
QSettings::WebLocalStorageFormat4WASM uniquement : Stocker les paramètres dans window.localStorage pour l'origine actuelle. Si les cookies ne sont pas autorisés, le format INI est utilisé. Cela permet de stocker jusqu'à 5 Mo par origine, mais l'accès est synchrone et JSPI n'est pas nécessaire.
QSettings::WebIndexedDBFormat5WASM uniquement : Stocker les paramètres dans une base de données indexée pour l'origine actuelle. Si les cookies ne sont pas autorisés, le format INI est utilisé. Cela nécessite JSPI, mais fournit plus de stockage que WebLocalStorageFormat.
QSettings::InvalidFormat16Valeur spéciale renvoyée par registerFormat().

Sous Unix, NativeFormat et IniFormat signifient la même chose, sauf que l'extension du fichier est différente (.conf pour NativeFormat, .ini pour IniFormat).

Le format de fichier INI est un format de fichier Windows que Qt prend en charge sur toutes les plates-formes. En l'absence d'une norme INI, nous essayons de suivre ce que fait Microsoft, avec les exceptions suivantes :

  • Si vous stockez des types que QVariant ne peut pas convertir en QString (par exemple, QPoint, QRect et QSize), Qt utilise une syntaxe basée sur @ pour encoder le type. Par exemple, Qt utilise une syntaxe basée sur pour encoder le type :
    pos = @QPoint(100 100)

    Pour minimiser les problèmes de compatibilité, tout @ qui n'apparaît pas en première position dans la valeur ou qui n'est pas suivi par un type Qt Positioning (Point, Rect, Size, etc.) est traité comme un caractère normal.

  • Bien que la barre oblique inverse soit un caractère spécial dans les fichiers INI, la plupart des applications Windows n'échappent pas aux barres obliques inverses (\) dans les chemins d'accès aux fichiers :
    windir = C:\Windows

    QSettings traite toujours l'antislash comme un caractère spécial et ne fournit pas d'API pour lire ou écrire de telles entrées.

  • Le format de fichier INI a des restrictions sévères sur la syntaxe d'une clé. Qt contourne ce problème en utilisant % comme caractère d'échappement dans les clés. De plus, si vous enregistrez un paramètre de premier niveau (une clé sans barre oblique, par exemple "someKey"), il apparaîtra dans la section "General" du fichier INI. Pour éviter d'écraser d'autres clés, si vous enregistrez quelque chose en utilisant une clé telle que "General/someKey", la clé sera située dans la section "%General", et non dans la section "General".
  • Conformément à la plupart des implémentations actuelles, QSettings suppose que les valeurs du fichier INI sont codées en UTF-8. Cela signifie que les valeurs seront décodées en tant qu'entrées encodées en UTF-8 et réécrites en UTF-8. Pour conserver la compatibilité ascendante avec les anciennes versions de Qt, les clés du fichier INI sont écrites au format %-encodé, mais peuvent être lues à la fois au format %-encodé et au format UTF-8.
Compatibilité avec les anciennes versions de Qt

Veuillez noter que ce comportement est différent de celui de QSettings dans les versions de Qt antérieures à Qt 6. Les fichiers INI écrits avec Qt 5 ou une version antérieure sont cependant entièrement lisibles par une application basée sur Qt 6 (à moins qu'un codec ini différent de utf8 n'ait été défini). Mais les fichiers INI écrits avec Qt 6 ne seront lisibles par les anciennes versions de Qt que si le "iniCodec" est un codec UTF-8.

Voir aussi registerFormat() et setPath().

QSettings::ReadFunc

Typedef pour un pointeur vers une fonction avec la signature suivante :

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

ReadFunc est utilisé dans registerFormat() comme pointeur vers une fonction qui lit un ensemble de paires clé/valeur. ReadFunc doit lire toutes les options en une seule fois et renvoyer tous les paramètres dans le conteneur SettingsMap, qui est initialement vide.

Voir aussi WriteFunc et registerFormat().

enum QSettings::Scope

Cette énumération précise si les paramètres sont spécifiques à l'utilisateur ou s'ils sont partagés par tous les utilisateurs d'un même système.

ConstanteValeurDescription
QSettings::UserScope0Stocke les paramètres dans un emplacement spécifique à l'utilisateur actuel (par exemple, dans le répertoire personnel de l'utilisateur).
QSettings::SystemScope1Stocker les paramètres dans un emplacement global, de sorte que tous les utilisateurs d'une même machine aient accès au même ensemble de paramètres.

Voir également setPath().

QSettings::SettingsMap

Typedef pour QMap<QString, QVariant>.

Voir aussi registerFormat().

enum QSettings::Status

Les valeurs d'état suivantes sont possibles :

ConstanteValeurDescription de l'état
QSettings::NoError0Aucune erreur n'est survenue.
QSettings::AccessError1Une erreur d'accès s'est produite (par exemple, tentative d'écriture dans un fichier en lecture seule).
QSettings::FormatError2Une erreur de format s'est produite (par exemple, chargement d'un fichier INI malformé).

Voir également status().

QSettings::WriteFunc

Typedef pour un pointeur vers une fonction avec la signature suivante :

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

WriteFunc est utilisé dans registerFormat() comme pointeur vers une fonction qui écrit un ensemble de paires clé/valeur. WriteFunc n'est appelé qu'une seule fois, vous devez donc sortir les paramètres en une seule fois.

Voir également ReadFunc et registerFormat().

Documentation sur les fonctions membres

[explicit] QSettings::QSettings(QObject *parent = nullptr)

Construit un objet QSettings pour accéder aux paramètres de l'application et de l'organisation définis précédemment par un appel à QCoreApplication::setOrganizationName(), QCoreApplication::setOrganizationDomain() et QCoreApplication::setApplicationName().

La portée est QSettings::UserScope et le format est defaultFormat() (QSettings::NativeFormat par défaut). Utilisez setDefaultFormat() avant d'appeler ce constructeur pour modifier le format par défaut utilisé par ce constructeur.

Le code

QSettings settings("Moose Soft", "Facturo-Pro");

est équivalent à

QCoreApplication::setOrganizationName("Moose Soft");
QCoreApplication::setApplicationName("Facturo-Pro");
QSettings settings;

Si QCoreApplication::setOrganizationName() et QCoreApplication::setApplicationName() n'ont pas été appelés auparavant, l'objet QSettings ne sera pas en mesure de lire ou d'écrire des paramètres, et status() renverra AccessError.

Vous devez fournir à la fois le domaine (utilisé par défaut sur macOS et iOS) et le nom (utilisé par défaut ailleurs), bien que le code fonctionne si vous n'en fournissez qu'un seul, qui sera alors utilisé (sur toutes les plateformes), en contradiction avec le nommage habituel du fichier sur les plateformes pour lesquelles il n'est pas utilisé par défaut.

Voir aussi QCoreApplication::setOrganizationName(), QCoreApplication::setOrganizationDomain(), QCoreApplication::setApplicationName(), et setDefaultFormat().

[explicit] QSettings::QSettings(QSettings::Scope scope, QObject *parent = nullptr)

Construit un objet QSettings de la même manière que QSettings(QObject *parent) mais avec la valeur donnée scope.

Voir aussi QSettings(QObject *parent).

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

Construit un objet QSettings pour accéder aux paramètres stockés dans le fichier appelé fileName, avec le parent parent. Si le fichier n'existe pas encore, il est créé.

Si format est QSettings::NativeFormat, la signification de fileName dépend de la plate-forme. Sous Unix, fileName est le nom d'un fichier INI. Sous macOS et iOS, fileName est le nom d'un fichier .plist. Sous Windows, fileName est un chemin dans le registre du système.

Si format est QSettings::IniFormat, fileName est le nom d'un fichier INI.

Attention : Cette fonction est fournie pour des raisons de commodité. Elle fonctionne bien pour accéder aux fichiers INI ou .plist générés par Qt XML, mais peut échouer avec certaines syntaxes trouvées dans de tels fichiers générés par d'autres programmes. En particulier, il faut tenir compte des limitations suivantes :

  • QSettings ne permet pas de lire les entrées INI "path", c'est-à-dire les entrées contenant des caractères slash non encapsulés. (Ces entrées sont en effet ambiguës et ne peuvent être résolues automatiquement).
  • Dans les fichiers INI, QSettings utilise le caractère @ comme métacaractère dans certains contextes, pour encoder des types de données spécifiques à Qt (par exemple, @Rect), et peut donc mal l'interpréter lorsqu'il apparaît dans des fichiers INI purs.

Voir aussi fileName().

[explicit] QSettings::QSettings(const QString &organization, const QString &application = QString(), QObject *parent = nullptr)

Construit un objet QSettings permettant d'accéder aux paramètres de l'application appelée application de l'organisation appelée organization, et dont le parent est parent.

Exemple :

QSettings settings("Moose Tech", "Facturo-Pro");

Le champ d'application est fixé à QSettings::UserScope, et le format est fixé à QSettings::NativeFormat (c'est-à-dire qu'appeler setDefaultFormat() avant d'appeler ce constructeur n'a aucun effet).

Voir aussi setDefaultFormat() et Fallback Mechanism.

QSettings::QSettings(QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = nullptr)

Construit un objet QSettings pour accéder aux paramètres de l'application appelée application de l'organisation appelée organization, et avec le parent parent.

Si scope est QSettings::UserScope, l'objet QSettings recherche d'abord les paramètres spécifiques à l'utilisateur, avant de rechercher les paramètres généraux du système comme solution de repli. Si scope est QSettings::SystemScope, l'objet QSettings ignore les paramètres spécifiques à l'utilisateur et donne accès aux paramètres du système.

Le format de stockage est défini sur QSettings::NativeFormat (c'est-à-dire qu'appeler setDefaultFormat() avant d'appeler ce constructeur n'a aucun effet).

Si aucun nom d'application n'est donné, l'objet QSettings n'accèdera qu'à l'ensemble de l'organisation locations.

Voir aussi setDefaultFormat().

QSettings::QSettings(QSettings::Format format, QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = nullptr)

Construit un objet QSettings pour accéder aux paramètres de l'application appelée application de l'organisation appelée organization, et avec le parent parent.

Si scope est QSettings::UserScope, l'objet QSettings recherche d'abord les paramètres spécifiques à l'utilisateur, avant de rechercher les paramètres généraux du système. Si scope est QSettings::SystemScope, l'objet QSettings ignore les paramètres propres à l'utilisateur et donne accès aux paramètres généraux du système.

Si format est QSettings::NativeFormat, l'API native est utilisée pour stocker les paramètres. Si format est QSettings::IniFormat, le format INI est utilisé.

Si aucun nom d'application n'est indiqué, l'objet QSettings n'accède qu'à l'ensemble de l'organisation locations.

[virtual noexcept] QSettings::~QSettings()

Détruit l'objet QSettings.

Toute modification non sauvegardée sera éventuellement écrite sur un support permanent.

Voir aussi sync().

QStringList QSettings::allKeys() const

Renvoie une liste de toutes les clés, y compris les sous-clés, qui peuvent être lues à l'aide de l'objet QSettings.

Exemple :

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"]

Si un groupe est défini à l'aide de beginGroup(), seules les clés du groupe sont renvoyées, sans le préfixe du groupe :

settings.beginGroup("fridge");
keys = settings.allKeys();
// keys: ["color", "size"]

Voir également childGroups() et childKeys().

QString QSettings::applicationName() const

Renvoie le nom de l'application utilisée pour stocker les paramètres.

Voir aussi QCoreApplication::applicationName(), format(), scope() et organizationName().

void QSettings::beginGroup(QAnyStringView prefix)

Ajoute prefix au groupe actuel.

Le groupe actuel est automatiquement ajouté à toutes les clés spécifiées dans QSettings. En outre, les fonctions d'interrogation telles que childGroups(), childKeys() et allKeys() sont basées sur le groupe. Par défaut, aucun groupe n'est défini.

Les groupes sont utiles pour éviter de saisir les mêmes chemins d'accès à plusieurs reprises. Par exemple :

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();

Ceci définira la valeur de trois paramètres :

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

Appelez endGroup() pour réinitialiser le groupe actuel à ce qu'il était avant l'appel correspondant à beginGroup(). Les groupes peuvent être imbriqués.

Remarque : dans les versions de Qt antérieures à la version 6.4, cette fonction prenait QString, et non QAnyStringView.

Voir aussi endGroup() et group().

int QSettings::beginReadArray(QAnyStringView prefix)

Ajoute prefix au groupe actuel et commence à lire un tableau. Renvoie la taille du tableau.

Exemple :

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();
    //...
}

Utilisez beginWriteArray() pour écrire le tableau en premier lieu.

Note : Dans les versions de Qt antérieures à la 6.4, cette fonction prenait QString, et non QAnyStringView.

Voir aussi beginWriteArray(), endArray() et setArrayIndex().

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

Ajoute prefix au groupe actuel et commence à écrire un tableau de taille size. Si size vaut -1 (valeur par défaut), il est automatiquement déterminé en fonction des index des entrées écrites.

Si vous avez de nombreuses occurrences d'un certain ensemble de clés, vous pouvez utiliser des tableaux pour vous faciliter la vie. Par exemple, supposons que vous souhaitiez enregistrer une liste de longueur variable de noms d'utilisateurs et de mots de passe. Vous pourriez alors écrire :

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();
    //...
}

Les clés générées auront la forme suivante

  • logins/size
  • logins/1/userName
  • logins/1/password
  • logins/2/userName
  • logins/2/password
  • logins/3/userName
  • logins/3/password
  • ...

Pour lire un tableau, utilisez beginReadArray().

Remarque : Dans les versions de Qt antérieures à la 6.4, cette fonction prenait QString, et non QAnyStringView.

Voir aussi beginReadArray(), endArray() et setArrayIndex().

QStringList QSettings::childGroups() const

Renvoie une liste de tous les groupes de premier niveau contenant des clés qui peuvent être lues à l'aide de l'objet QSettings.

Exemple :

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"]

Si un groupe est défini à l'aide de beginGroup(), les clés de premier niveau de ce groupe sont renvoyées, sans le préfixe du groupe.

settings.beginGroup("fridge");
groups = settings.childGroups();
// groups: []

Vous pouvez naviguer dans toute la hiérarchie des paramètres en utilisant childKeys() et childGroups() de manière récursive.

Voir également childKeys() et allKeys().

QStringList QSettings::childKeys() const

Renvoie une liste de toutes les clés de premier niveau qui peuvent être lues à l'aide de l'objet QSettings.

Exemple :

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"]

Si un groupe est défini à l'aide de beginGroup(), les clés de premier niveau de ce groupe sont renvoyées, sans le préfixe du groupe :

settings.beginGroup("fridge");
keys = settings.childKeys();
// keys: ["color", "size"]

Vous pouvez naviguer dans toute la hiérarchie des paramètres en utilisant childKeys() et childGroups() de manière récursive.

Voir également childGroups() et allKeys().

void QSettings::clear()

Supprime toutes les entrées de l'emplacement principal associé à cet objet QSettings.

Les entrées dans les emplacements de repli ne sont pas supprimées.

Si vous ne voulez supprimer que les entrées de l'emplacement actuel group(), utilisez remove("") à la place.

Voir également remove() et setFallbacksEnabled().

bool QSettings::contains(QAnyStringView key) const

Renvoie true s'il existe un paramètre appelé key; renvoie false dans le cas contraire.

Si un groupe est défini à l'aide de beginGroup(), key est considéré comme relatif à ce groupe.

La recherche de clé sera sensible ou insensible à la casse en fonction du format de fichier et du système d'exploitation. Pour éviter les problèmes de portabilité, voir les règles de Section and Key Syntax.

Note : Dans les versions de Qt antérieures à la 6.4, cette fonction prenait QString, et non QAnyStringView.

Voir aussi value() et setValue().

[static] QSettings::Format QSettings::defaultFormat()

Renvoie le format de fichier par défaut utilisé pour stocker les paramètres du constructeur QSettings(QObject *). Si aucun format par défaut n'est défini, QSettings::NativeFormat est utilisé.

Voir aussi setDefaultFormat() et format().

void QSettings::endArray()

Ferme le tableau qui a été lancé à l'aide de beginReadArray() ou beginWriteArray().

Voir aussi beginReadArray() et beginWriteArray().

void QSettings::endGroup()

Réinitialise le groupe à ce qu'il était avant l'appel beginGroup() correspondant.

Exemple :

settings.beginGroup("alpha");
// settings.group() == "alpha"

settings.beginGroup("beta");
// settings.group() == "alpha/beta"

settings.endGroup();
// settings.group() == "alpha"

settings.endGroup();
// settings.group() == ""

Voir également beginGroup() et group().

[override virtual protected] bool QSettings::event(QEvent *event)

Réimplémente : QObject::event(QEvent *e).

bool QSettings::fallbacksEnabled() const

Renvoie true si les fallbacks sont activés ; renvoie false dans le cas contraire.

Par défaut, les fallbacks sont activés.

Voir aussi setFallbacksEnabled().

QString QSettings::fileName() const

Renvoie le chemin d'accès où sont stockés les paramètres écrits à l'aide de cet objet QSettings.

Sous Windows, si le format est QSettings::NativeFormat, la valeur renvoyée est un chemin d'accès au registre du système et non un chemin d'accès à un fichier.

Voir également isWritable() et format().

QSettings::Format QSettings::format() const

Renvoie le format utilisé pour stocker les paramètres.

Voir aussi defaultFormat(), fileName(), scope(), organizationName() et applicationName().

QString QSettings::group() const

Renvoie le groupe actuel.

Voir aussi beginGroup() et endGroup().

bool QSettings::isAtomicSyncRequired() const

Renvoie true si QSettings n'est autorisé qu'à effectuer une sauvegarde et un rechargement atomiques (synchronisation) des paramètres. Renvoie false s'il est autorisé à enregistrer le contenu des paramètres directement dans le fichier de configuration.

La valeur par défaut est true.

Voir également setAtomicSyncRequired() et QSaveFile.

bool QSettings::isWritable() const

Renvoie true si les paramètres peuvent être écrits à l'aide de cet objet QSettings; renvoie false dans le cas contraire.

L'une des raisons pour lesquelles isWritable() peut renvoyer false est que QSettings opère sur un fichier en lecture seule.

Attention : Cette fonction n'est pas parfaitement fiable, car les permissions du fichier peuvent changer à tout moment.

Voir aussi fileName(), status() et sync().

QString QSettings::organizationName() const

Renvoie le nom de l'organisation utilisée pour stocker les paramètres.

Voir aussi QCoreApplication::organizationName(), format(), scope() et applicationName().

[static] QSettings::Format QSettings::registerFormat(const QString &extension, QSettings::ReadFunc readFunc, QSettings::WriteFunc writeFunc, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive)

Enregistre un format de stockage personnalisé. En cas de succès, il renvoie une valeur Format spéciale qui peut être transmise au constructeur QSettings. En cas d'échec, il renvoie InvalidFormat.

Le paramètre extension est l'extension de fichier associée au format (sans le '.').

Les paramètres readFunc et writeFunc sont des pointeurs vers des fonctions qui lisent et écrivent un ensemble de paires clé/valeur. Le paramètre QIODevice des fonctions de lecture et d'écriture est toujours ouvert en mode binaire (c'est-à-dire sans le drapeau QIODeviceBase::Text ).

Le paramètre caseSensitivity indique si les clés sont sensibles à la casse ou non. Cela fait une différence lors de la recherche de valeurs à l'aide de QSettings. Par défaut, les clés sont sensibles à la casse. Le paramètre doit être Qt::CaseSensitive sur les systèmes Unix.

Par défaut, si vous utilisez l'un des constructeurs qui fonctionnent en termes de nom d'organisation et de nom d'application, les emplacements du système de fichiers utilisés sont les mêmes que pour IniFormat. Utilisez setPath() pour spécifier d'autres emplacements.

Exemple :

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");

    //...
}

Remarque : cette fonction est à l'épreuve des threads.

Voir aussi setPath().

void QSettings::remove(QAnyStringView key)

Supprime le paramètre key et tous les sous-paramètres de key.

Exemple :

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"]

Sachez que si l'un des emplacements de repli contient un paramètre avec la même clé, ce paramètre sera visible après l'appel à remove().

Si key est une chaîne vide, toutes les clés de l'emplacement actuel group() sont supprimées. Par exemple :

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"]

La recherche de clés sera sensible ou insensible à la casse en fonction du format de fichier et du système d'exploitation. Pour éviter les problèmes de portabilité, voir les règles de Section and Key Syntax.

Note : Dans les versions de Qt antérieures à la 6.4, cette fonction prenait QString, et non QAnyStringView.

Voir aussi setValue(), value() et contains().

QSettings::Scope QSettings::scope() const

Renvoie l'étendue utilisée pour stocker les paramètres.

Voir aussi format(), organizationName() et applicationName().

void QSettings::setArrayIndex(int i)

Fixe l'indice du tableau actuel à i. Les appels à des fonctions telles que setValue(), value(), remove() et contains() porteront sur l'entrée du tableau à cet indice.

Vous devez appeler beginReadArray() ou beginWriteArray() avant de pouvoir appeler cette fonction.

void QSettings::setAtomicSyncRequired(bool enable)

Indique si QSettings doit effectuer une sauvegarde et un rechargement atomiques (synchronisation) des paramètres. Si l'argument enable est true (valeur par défaut), sync() n'effectuera que des opérations de synchronisation atomiques. Si ce n'est pas possible, sync() échouera et status() sera une condition d'erreur.

La définition de cette propriété à false permet à QSettings d'écrire directement dans le fichier de configuration et d'ignorer les erreurs qui tentent de le verrouiller contre d'autres processus qui essaient d'écrire en même temps. En raison du risque de corruption, cette option doit être utilisée avec précaution, mais elle est nécessaire dans certaines conditions, comme dans le cas d'un fichier de configuration QSettings::IniFormat qui se trouve dans un répertoire où il est impossible d'écrire, ou dans le cas de flux de données alternatifs NTFS.

Voir QSaveFile pour plus d'informations sur cette fonctionnalité.

Voir aussi isAtomicSyncRequired() et QSaveFile.

[static] void QSettings::setDefaultFormat(QSettings::Format format)

Définit le format de fichier par défaut à format, qui est utilisé pour stocker les paramètres du constructeur QSettings(QObject *).

Si aucun format par défaut n'est défini, QSettings::NativeFormat est utilisé. Consultez la documentation du constructeur QSettings que vous utilisez pour savoir si ce constructeur ignore cette fonction.

Voir aussi defaultFormat() et format().

void QSettings::setFallbacksEnabled(bool b)

Définit si les fallbacks sont activés à l'adresse b.

Par défaut, les fallbacks sont activés.

Voir également fallbacksEnabled().

[static] void QSettings::setPath(QSettings::Format format, QSettings::Scope scope, const QString &path)

Définit le chemin utilisé pour le stockage des paramètres pour format et scope, à path. format peut être un format personnalisé.

Le tableau ci-dessous résume les valeurs par défaut :

Plate-formeFormatChamp d'applicationChemin d'accès
WindowsIniFormatUserScopeFOLDERID_RoamingAppData
SystemScopeFOLDERID_ProgramData
UnixNativeFormat, IniFormatUserScope$HOME/.config
SystemScope/etc/xdg
macOS et iOSIniFormatUserScope$HOME/.config
SystemScope/etc/xdg

Les chemins d'accès par défaut UserScope sous Unix, macOS et iOS ($HOME/.config ou $HOME/Settings) peuvent être remplacés par l'utilisateur en définissant la variable d'environnement XDG_CONFIG_HOME. Les chemins d'accès par défaut SystemScope sous Unix, macOS et iOS (/etc/xdg) peuvent être remplacés lors de la construction de la bibliothèque Qt à l'aide de l'indicateur -sysconfdir du script configure (voir QLibraryInfo pour plus de détails).

La définition des chemins NativeFormat sous Windows, macOS et iOS n'a aucun effet.

Attention : Cette fonction n'affecte pas les objets QSettings existants.

Voir aussi registerFormat().

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

Fixe la valeur du paramètre key à value. Si le paramètre key existe déjà, la valeur précédente est écrasée.

La recherche de clé sera sensible ou insensible à la casse en fonction du format de fichier et du système d'exploitation. Pour éviter les problèmes de portabilité, voir les règles de Section and Key Syntax.

Exemple :

QSettings settings;
settings.setValue("interval", 30);
settings.value("interval").toInt();     // returns 30

settings.setValue("interval", 6.55);
settings.value("interval").toDouble();  // returns 6.55

Remarque : dans les versions de Qt antérieures à la 6.4, cette fonction prenait QString, et non QAnyStringView.

Voir aussi value(), remove() et contains().

QSettings::Status QSettings::status() const

Renvoie un code d'état indiquant la première erreur rencontrée par QSettings, ou QSettings::NoError si aucune erreur ne s'est produite.

Sachez que QSettings retarde l'exécution de certaines opérations. C'est pourquoi vous pouvez appeler sync() pour vous assurer que les données stockées dans QSettings sont écrites sur le disque avant d'appeler status().

Voir également sync().

void QSettings::sync()

Écrit toutes les modifications non enregistrées dans la mémoire permanente et recharge tous les paramètres qui ont été modifiés entre-temps par une autre application.

Cette fonction est appelée automatiquement par le destructeur de QSettings et par la boucle d'événements à intervalles réguliers, de sorte que vous n'avez normalement pas besoin de l'appeler vous-même.

Voir également status().

QVariant QSettings::value(QAnyStringView key) const

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

Renvoie la valeur du paramètre key. Si le paramètre n'existe pas, le système renvoie defaultValue.

Si aucune valeur par défaut n'est spécifiée, une valeur par défaut QVariant est renvoyée.

La recherche de clé sera sensible ou insensible à la casse en fonction du format de fichier et du système d'exploitation. Pour éviter les problèmes de portabilité, voir les règles de Section and Key Syntax.

Exemple :

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

Remarque : dans les versions de Qt antérieures à la version 6.4, cette fonction prenait QString, et non QAnyStringView.

Voir aussi setValue(), contains() et 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.