QSettings Class
Die Klasse QSettings bietet persistente, plattformunabhängige Anwendungseinstellungen. Mehr...
Kopfzeile: | #include <QSettings> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Vererbungen: | QObject |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QSettings ist Teil von Input/Output und Networking.
Hinweis: Alle Funktionen in dieser Klasse sind reentrant.
Hinweis: Diese Funktionen sind auch thread-sicher:
- registerFormat(const QString &extension, QSettings::ReadFunc readFunc, QSettings::WriteFunc writeFunc, Qt::CaseSensitivity caseSensitivity)
Öffentliche Typen
enum | Format { NativeFormat, Registry32Format, Registry64Format, IniFormat, WebLocalStorageFormat, …, InvalidFormat } |
ReadFunc | |
enum | Scope { UserScope, SystemScope } |
SettingsMap | |
enum | Status { NoError, AccessError, FormatError } |
WriteFunc |
Öffentliche Funktionen
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 |
Statische öffentliche Mitglieder
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) |
Reimplementierte geschützte Funktionen
virtual bool | event(QEvent *event) override |
Detaillierte Beschreibung
Benutzer erwarten normalerweise, dass sich eine Anwendung ihre Einstellungen (Fenstergrößen und -positionen, Optionen usw.) über Sitzungen hinweg merkt. Diese Informationen werden unter Windows oft in der Systemregistrierung und unter macOS und iOS in Eigenschaftslistendateien gespeichert. Auf Unix-Systemen verwenden viele Anwendungen (einschließlich der KDE-Anwendungen) INI-Textdateien, da es keinen Standard gibt.
QSettings ist eine Abstraktion um diese Technologien herum, die es Ihnen ermöglicht, Anwendungseinstellungen auf eine portable Weise zu speichern und wiederherzustellen. Es unterstützt auch custom storage formats.
Die API von QSettings basiert auf QVariant, was es Ihnen ermöglicht, die meisten wertbasierten Typen, wie QString, QRect und QImage, mit minimalem Aufwand zu speichern.
Wenn Sie nur eine nicht-persistente speicherbasierte Struktur benötigen, sollten Sie stattdessen QMap<QString, QVariant> verwenden.
Grundlegende Verwendung
Wenn Sie ein QSettings-Objekt erstellen, müssen Sie den Namen Ihres Unternehmens oder Ihrer Organisation sowie den Namen Ihrer Anwendung übergeben. Wenn Ihr Produkt zum Beispiel Star Runner heißt und Ihr Unternehmen MySoft, würden Sie das QSettings-Objekt wie folgt erstellen:
QSettings settings("MySoft", "Star Runner");
QSettings-Objekte können entweder auf dem Stack oder auf dem Heap (d. h. mit new
) erstellt werden. Der Aufbau und die Zerstörung eines QSettings-Objekts ist sehr schnell.
Wenn Sie QSettings an vielen Stellen in Ihrer Anwendung verwenden, sollten Sie den Organisationsnamen und den Anwendungsnamen mit QCoreApplication::setOrganizationName() und QCoreApplication::setApplicationName() angeben und dann den Standard QSettings-Konstruktor verwenden:
QCoreApplication::setOrganizationName("MySoft"); QCoreApplication::setOrganizationDomain("mysoft.com"); QCoreApplication::setApplicationName("Star Runner"); ... QSettings settings;
(Hier geben wir auch die Internetdomäne der Organisation an. Wenn die Internetdomäne festgelegt ist, wird sie unter macOS und iOS anstelle des Organisationsnamens verwendet, da macOS- und iOS-Programme üblicherweise Internetdomänen verwenden, um sich zu identifizieren. Wenn keine Domäne festgelegt ist, wird eine gefälschte Domäne aus dem Organisationsnamen abgeleitet. Siehe Platform-Specific Notes unten für Details).
QSettings speichert Einstellungen. Jede Einstellung besteht aus einer QString, die den Namen der Einstellung (den Schlüssel) angibt, und einer QVariant, die die mit dem Schlüssel verbundenen Daten speichert. Um eine Einstellung zu schreiben, verwenden Sie setValue(). Ein Beispiel:
settings.setValue("editor/wrapMargin", 68);
Wenn es bereits eine Einstellung mit demselben Schlüssel gibt, wird der vorhandene Wert durch den neuen Wert überschrieben. Aus Gründen der Effizienz werden die Änderungen möglicherweise nicht sofort im permanenten Speicher abgelegt. (Sie können jederzeit sync() aufrufen, um Ihre Änderungen zu übernehmen).
Sie können den Wert einer Einstellung mit value() zurückholen:
int margin = settings.value("editor/wrapMargin").toInt();
Wenn es keine Einstellung mit dem angegebenen Namen gibt, gibt QSettings eine Null zurück QVariant (die in die Ganzzahl 0 umgewandelt werden kann). Sie können einen anderen Standardwert angeben, indem Sie ein zweites Argument an value() übergeben:
int margin = settings.value("editor/wrapMargin", 80).toInt();
Um zu prüfen, ob ein bestimmter Schlüssel existiert, rufen Sie contains() auf. Um die mit einem Schlüssel verbundene Einstellung zu entfernen, rufen Sie remove() auf. Um die Liste aller Schlüssel zu erhalten, rufen Sie allKeys() auf. Um alle Schlüssel zu entfernen, rufen Sie clear() auf.
QVariant und GUI-Typen
Da QVariant Teil des Moduls Qt Core ist, kann es keine Konvertierungsfunktionen für Datentypen wie QColor, QImage und QPixmap, die Teil von Qt GUI sind, bereitstellen. Mit anderen Worten, es gibt keine toColor()
, toImage()
oder toPixmap()
Funktionen in QVariant.
Stattdessen können Sie die Vorlagenfunktion QVariant::value() verwenden. Ein Beispiel:
QSettings settings("MySoft", "Star Runner"); QColor color = settings.value("DataPump/bgcolor").value<QColor>();
Die umgekehrte Konvertierung (z. B. von QColor nach QVariant) erfolgt automatisch für alle Datentypen, die von QVariant unterstützt werden, einschließlich GUI-bezogener Typen:
QSettings settings("MySoft", "Star Runner"); QColor color = palette().background().color(); settings.setValue("DataPump/bgcolor", color);
Benutzerdefinierte Typen, die mit qRegisterMetaType() registriert wurden und über Operatoren für das Streaming zu und von einem QDataStream verfügen, können mit QSettings gespeichert werden.
Abschnitt und Schlüssel-Syntax
Einstellungsschlüssel können beliebige Unicode-Zeichen enthalten. Die Windows-Registrierung und INI-Dateien verwenden Schlüssel ohne Berücksichtigung der Groß- und Kleinschreibung, während die CFPreferences-API unter macOS und iOS Schlüssel mit Berücksichtigung der Groß- und Kleinschreibung verwendet. Um Portabilitätsprobleme zu vermeiden, befolgen Sie diese einfachen Regeln:
- Beziehen Sie sich immer auf denselben Schlüssel, indem Sie die gleiche Groß- und Kleinschreibung verwenden. Wenn Sie beispielsweise einen Schlüssel an einer Stelle in Ihrem Code als "Text Fonts" bezeichnen, sollten Sie ihn an einer anderen Stelle nicht als "Text Fonts" bezeichnen.
- Vermeiden Sie Schlüsselnamen, die bis auf die Groß- und Kleinschreibung identisch sind. Wenn Sie zum Beispiel einen Schlüssel mit dem Namen "MainWindow" haben, versuchen Sie nicht, einen anderen Schlüssel als "mainwindow" zu speichern.
- Verwenden Sie keine Schrägstriche ('/' und '\') in Abschnitts- oder Schlüsselnamen; das Backslash-Zeichen wird zur Trennung von Unterschlüsseln verwendet (siehe unten). Auf Fenstern werden '\' von QSettings in '/' umgewandelt, was sie identisch macht.
Sie können hierarchische Schlüssel bilden, indem Sie das '/'-Zeichen als Trennzeichen verwenden, ähnlich wie bei Unix-Dateipfaden. Ein Beispiel:
settings.setValue("mainwindow/size", win->size()); settings.setValue("mainwindow/fullScreen", win->isFullScreen()); settings.setValue("outputpanel/visible", panel->isVisible());
Wenn Sie viele Einstellungen mit dem gleichen Präfix speichern oder wiederherstellen wollen, können Sie das Präfix mit beginGroup() angeben und am Ende endGroup() aufrufen. Hier noch einmal das gleiche Beispiel, aber diesmal mit dem Gruppenmechanismus:
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();
Wenn eine Gruppe mit beginGroup() gesetzt wird, ändert sich das Verhalten der meisten Funktionen entsprechend. Gruppen können rekursiv gesetzt werden.
Zusätzlich zu Gruppen unterstützt QSettings auch ein "Array"-Konzept. Siehe beginReadArray() und beginWriteArray() für Details.
Fallback-Mechanismus
Nehmen wir an, Sie haben ein QSettings-Objekt mit dem Organisationsnamen MySoft und dem Anwendungsnamen Star Runner erstellt. Wenn Sie einen Wert nachschlagen, werden bis zu vier Orte in dieser Reihenfolge durchsucht:
- ein benutzerspezifischer Speicherort für die Star Runner-Anwendung
- ein benutzerspezifischer Speicherort für alle Anwendungen von MySoft
- ein systemweiter Speicherort für die Star Runner-Anwendung
- ein systemweiter Speicherort für alle Anwendungen von MySoft
(Siehe Platform-Specific Notes weiter unten für Informationen über diese Speicherorte auf den verschiedenen von Qt unterstützten Plattformen).
Wenn ein Schlüssel am ersten Speicherort nicht gefunden wird, wird die Suche am zweiten Speicherort fortgesetzt und so weiter. Auf diese Weise können Sie system- oder organisationsweite Einstellungen speichern und sie pro Benutzer oder pro Anwendung überschreiben. Um diesen Mechanismus zu deaktivieren, rufen Sie setFallbacksEnabled(false) auf.
Obwohl die Schlüssel aller vier Speicherorte zum Lesen zur Verfügung stehen, ist nur die erste Datei (der benutzerspezifische Speicherort für die jeweilige Anwendung) zum Schreiben zugänglich. Um in eine der anderen Dateien zu schreiben, lassen Sie den Anwendungsnamen weg und/oder geben Sie QSettings::SystemScope an (im Gegensatz zu QSettings::UserScope, dem Standard).
Schauen wir uns das an einem Beispiel an:
QSettings obj1("MySoft", "Star Runner"); QSettings obj2("MySoft"); QSettings obj3(QSettings::SystemScope, "MySoft", "Star Runner"); QSettings obj4(QSettings::SystemScope, "MySoft");
Die folgende Tabelle fasst zusammen, welche QSettings-Objekte auf welchen Speicherort zugreifen. "X" bedeutet, dass der Speicherort der Hauptspeicherort ist, der mit dem QSettings-Objekt verknüpft ist und sowohl zum Lesen als auch zum Schreiben verwendet wird; o" bedeutet, dass der Speicherort beim Lesen als Fallback verwendet wird.
Speicherorte | obj1 | obj2 | obj3 | obj4 |
---|---|---|---|---|
1. Benutzer, Anwendung | X | |||
2. Benutzer, Organisation | o | X | ||
3. System, Anwendung | o | X | ||
4. System, Organisation | o | o | o | X |
Das Schöne an diesem Mechanismus ist, dass er auf allen Plattformen funktioniert, die von Qt unterstützt werden, und dass er Ihnen immer noch eine Menge Flexibilität bietet, ohne dass Sie irgendwelche Dateinamen oder Registrierungspfade angeben müssen.
Wenn Sie INI-Dateien auf allen Plattformen anstelle der nativen API verwenden möchten, können Sie QSettings::IniFormat als erstes Argument an den QSettings-Konstruktor übergeben, gefolgt von dem Bereich, dem Organisationsnamen und dem Anwendungsnamen:
Beachten Sie, dass INI-Dateien die Unterscheidung zwischen numerischen Daten und den zu ihrer Kodierung verwendeten Strings verlieren, so dass als Zahlen geschriebene Werte als QString zurückgelesen werden müssen. Der numerische Wert kann mit QString::toInt(), QString::toDouble() und ähnlichen Funktionen wiederhergestellt werden.
Wiederherstellen des Status einer GUI-Anwendung
QSettings wird oft verwendet, um den Zustand einer GUI-Anwendung zu speichern. Das folgende Beispiel zeigt, wie man QSettings verwendet, um die Geometrie des Hauptfensters einer Anwendung zu speichern und wiederherzustellen.
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(); }
Siehe Fenstergeometrie für eine Diskussion darüber, warum es besser ist, QWidget::resize() und QWidget::move() anstelle von QWidget::setGeometry() aufzurufen, um die Geometrie eines Fensters wiederherzustellen.
Die Funktionen readSettings()
und writeSettings()
müssen aus dem Konstruktor und dem Close Event Handler des Hauptfensters wie folgt aufgerufen werden:
MainWindow::MainWindow() { ... readSettings(); } void MainWindow::closeEvent(QCloseEvent *event) { if (userReallyWantsToQuit()) { writeSettings(); event->accept(); } else { event->ignore(); } }
Gleichzeitiger Zugriff auf Einstellungen von mehreren Threads oder Prozessen aus
QSettings ist reentrant. Das bedeutet, dass Sie verschiedene QSettings-Objekte in verschiedenen Threads gleichzeitig verwenden können. Diese Garantie gilt selbst dann, wenn die QSettings-Objekte auf dieselben Dateien auf der Festplatte (oder auf dieselben Einträge in der Systemregistrierung) verweisen. Wenn eine Einstellung durch ein QSettings-Objekt geändert wird, ist die Änderung sofort in allen anderen QSettings-Objekten sichtbar, die am selben Ort arbeiten und sich im selben Prozess befinden.
QSettings kann sicher von verschiedenen Prozessen (die verschiedene Instanzen Ihrer Anwendung sein können, die zur gleichen Zeit laufen, oder verschiedene Anwendungen insgesamt) verwendet werden, um an den gleichen Systemorten zu lesen und zu schreiben, sofern bestimmte Bedingungen erfüllt sind. Für QSettings::IniFormat werden beratende Dateisperren und ein intelligenter Zusammenführungsalgorithmus verwendet, um die Datenintegrität zu gewährleisten. Die Voraussetzung dafür ist, dass die beschreibbare Konfigurationsdatei eine reguläre Datei ist und sich in einem Verzeichnis befindet, in dem der aktuelle Benutzer neue, temporäre Dateien erstellen kann. Wenn das nicht der Fall ist, muss man setAtomicSyncRequired() verwenden, um die Sicherheit auszuschalten.
Beachten Sie, dass sync() Änderungen importiert, die von anderen Prozessen vorgenommen wurden (zusätzlich zum Schreiben der Änderungen aus diesem QSettings).
Plattform-spezifische Hinweise
Orte, an denen die Anwendungseinstellungen gespeichert werden
Wie im Abschnitt Fallback Mechanism erwähnt, speichert QSettings die Einstellungen für eine Anwendung an bis zu vier Orten, je nachdem, ob die Einstellungen benutzerspezifisch oder systemweit sind und ob die Einstellungen anwendungsspezifisch oder organisationsweit sind. Der Einfachheit halber nehmen wir an, dass die Organisation MySoft heißt und die Anwendung Star Runner.
Auf Unix-Systemen werden, wenn das Dateiformat NativeFormat lautet, standardmäßig die folgenden Dateien verwendet:
$HOME/.config/MySoft/Star Runner.conf
$HOME/.config/MySoft.conf
- für jedes Verzeichnis <dir> in $XDG_CONFIG_DIRS:
<dir>/MySoft/Star Runner.conf
- für jedes Verzeichnis <dir> in $XDG_CONFIG_DIRS:
<dir>/MySoft.conf
Hinweis: Wenn XDG_CONFIG_DIRS nicht gesetzt ist, wird der Standardwert von /etc/xdg
verwendet.
Unter macOS und iOS werden diese Dateien standardmäßig verwendet, wenn das Dateiformat NativeFormat lautet:
$HOME/Library/Preferences/com.MySoft.Star Runner.plist
$HOME/Library/Preferences/com.MySoft.plist
/Library/Preferences/com.MySoft.Star Runner.plist
/Library/Preferences/com.MySoft.plist
Unter Windows werden die Einstellungen von NativeFormat in den folgenden Registrierungspfaden gespeichert:
HKEY_CURRENT_USER\Software\MySoft\Star Runner
HKEY_CURRENT_USER\Software\MySoft\OrganizationDefaults
HKEY_LOCAL_MACHINE\Software\MySoft\Star Runner
HKEY_LOCAL_MACHINE\Software\MySoft\OrganizationDefaults
Hinweis: Unter Windows werden die Einstellungen für 32-Bit-Programme, die im WOW64-Modus ausgeführt werden, in folgendem Registrierungspfad gespeichert: HKEY_LOCAL_MACHINE\Software\WOW6432node
.
Wenn das Dateiformat NativeFormat ist, ist dies "Settings/MySoft/Star Runner.conf" im Home-Verzeichnis der Anwendung.
Wenn das Dateiformat IniFormat ist, werden die folgenden Dateien unter Unix, macOS und iOS verwendet:
$HOME/.config/MySoft/Star Runner.ini
$HOME/.config/MySoft.ini
- für jedes Verzeichnis <dir> in $XDG_CONFIG_DIRS:
<dir>/MySoft/Star Runner.ini
- für jedes Verzeichnis <dir> in $XDG_CONFIG_DIRS:
<dir>/MySoft.ini
Hinweis: Wenn XDG_CONFIG_DIRS nicht gesetzt ist, wird der Standardwert von /etc/xdg
verwendet.
Unter Windows werden die folgenden Dateien verwendet:
FOLDERID_RoamingAppData\MySoft\Star Runner.ini
FOLDERID_RoamingAppData\MySoft.ini
FOLDERID_ProgramData\MySoft\Star Runner.ini
FOLDERID_ProgramData\MySoft.ini
Die Bezeichner mit dem Präfix FOLDERID_
sind spezielle Element-ID-Listen, die an die Win32-API-Funktion SHGetKnownFolderPath()
übergeben werden, um den entsprechenden Pfad zu erhalten.
FOLDERID_RoamingAppData
zeigt normalerweise auf C:\Users\User Name\AppData\Roaming
, auch angezeigt durch die Umgebungsvariable %APPDATA%
.
FOLDERID_ProgramData
zeigt in der Regel auf C:\ProgramData
.
Wenn das Dateiformat IniFormat ist, ist dies "Einstellungen/MySoft/Star Runner.ini" im Home-Verzeichnis der Anwendung.
Die Pfade für die Dateien .ini
und .conf
können mit setPath() geändert werden. Unter Unix, macOS und iOS kann der Benutzer sie überschreiben, indem er die Umgebungsvariable XDG_CONFIG_HOME
setzt; siehe setPath() für Details.
Direkter Zugriff auf INI- und .plist-Dateien
Manchmal möchten Sie auf Einstellungen zugreifen, die in einer bestimmten Datei oder einem Registrierungspfad gespeichert sind. Wenn Sie eine INI-Datei direkt lesen möchten, können Sie auf allen Plattformen den QSettings-Konstruktor verwenden, der als erstes Argument einen Dateinamen und als zweites Argument QSettings::IniFormat übergibt. Ein Beispiel:
Sie können dann das QSettings-Objekt zum Lesen und Schreiben von Einstellungen in der Datei verwenden.
Unter macOS und iOS können Sie auf die Eigenschaftsliste .plist
zugreifen, indem Sie QSettings::NativeFormat als zweites Argument übergeben. Ein Beispiel:
Direkter Zugriff auf die Windows-Registrierung
Unter Windows können Sie mit QSettings auf Einstellungen zugreifen, die mit QSettings (oder Einstellungen in einem unterstützten Format, z. B. String-Daten) in die Systemregistrierung geschrieben wurden. Dies geschieht, indem man ein QSettings-Objekt mit einem Pfad in der Registry und QSettings::NativeFormat erstellt.
Ein Beispiel:
Alle Registry-Einträge, die unter dem angegebenen Pfad stehen, können über das QSettings-Objekt wie gewohnt gelesen oder geschrieben werden (mit Schrägstrichen statt Backslashes). Ein Beispiel:
settings.setValue("11.0/Outlook/Security/DontTrustInstalledFiles", 0);
Beachten Sie, dass das Backslash-Zeichen, wie erwähnt, von QSettings zur Trennung von Unterschlüsseln verwendet wird. Daher können Sie keine Windows-Registrierungseinträge lesen oder schreiben, die Schrägstriche oder Backslashes enthalten; Sie sollten eine native Windows-API verwenden, wenn Sie dies benötigen.
Zugriff auf allgemeine Registry-Einstellungen unter Windows
Unter Windows ist es möglich, dass ein Schlüssel sowohl einen Wert als auch Unterschlüssel hat. Auf seinen Standardwert wird durch die Verwendung von "Default" oder "." anstelle eines Unterschlüssels zugegriffen:
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"
Auf anderen Plattformen als Windows werden "Standard" und "." als normale Unterschlüssel behandelt.
Plattform-Einschränkungen
Obwohl QSettings versucht, die Unterschiede zwischen den verschiedenen unterstützten Plattformen auszugleichen, gibt es dennoch ein paar Unterschiede, die Sie bei der Portierung Ihrer Anwendung beachten sollten:
- Die Windows-Systemregistrierung hat die folgenden Einschränkungen: Ein Unterschlüssel darf nicht länger als 255 Zeichen sein, der Wert eines Eintrags darf nicht länger als 16.383 Zeichen sein, und alle Werte eines Schlüssels dürfen nicht länger als 65.535 Zeichen sein. Eine Möglichkeit, diese Beschränkungen zu umgehen, besteht darin, die Einstellungen unter IniFormat statt unter NativeFormat zu speichern.
- Wenn unter Windows die Windows-Systemregistrierung verwendet wird, behält QSettings den ursprünglichen Typ des Wertes nicht bei. Daher kann sich der Typ des Wertes ändern, wenn ein neuer Wert gesetzt wird. Ein Wert mit dem Typ
REG_EXPAND_SZ
ändert sich zum Beispiel inREG_SZ
. - Unter macOS und iOS gibt allKeys() einige zusätzliche Schlüssel für globale Einstellungen zurück, die für alle Anwendungen gelten. Diese Schlüssel können mit value() gelesen werden, können aber nicht geändert, sondern nur überschattet werden. Der Aufruf von setFallbacksEnabled(false) blendet diese globalen Einstellungen aus.
- Unter macOS und iOS erwartet die von QSettings verwendete CFPreferences-API Internet-Domänennamen statt Organisationsnamen. Um eine einheitliche API bereitzustellen, leitet QSettings einen gefälschten Domänennamen aus dem Organisationsnamen ab (es sei denn, der Organisationsname ist bereits ein Domänenname, z. B. OpenOffice.org). Der Algorithmus fügt ".com" an den Firmennamen an und ersetzt Leerzeichen und andere unzulässige Zeichen durch Bindestriche. Wenn Sie einen anderen Domänennamen angeben möchten, rufen Sie QCoreApplication::setOrganizationDomain(), QCoreApplication::setOrganizationName() und QCoreApplication::setApplicationName() in Ihrer Funktion
main()
auf und verwenden dann den Standardkonstruktor QSettings. Eine andere Lösung ist die Verwendung von Präprozessor-Direktiven, zum Beispiel: - Unter macOS haben sich die Zugriffsrechte auf Einstellungen, die nicht dem aktuellen Benutzer gehören (d.h. SystemScope), mit 10.7 (Lion) geändert. Vor dieser Version konnten Benutzer mit Administratorrechten auf diese Einstellungen zugreifen. In 10.7 und 10.8 (Mountain Lion) ist dies nur noch für root möglich. Mit 10.9 (Mavericks) wird diese Regel jedoch wieder geändert, allerdings nur für das native Format (plist-Dateien).
Siehe auch QVariant und QSessionManager.
Dokumentation der Mitgliedstypen
enum QSettings::Format
Dieser Enum-Typ gibt das von QSettings verwendete Speicherformat an.
Konstante | Wert | Beschreibung |
---|---|---|
QSettings::NativeFormat | 0 | Speichert die Einstellungen unter Verwendung des am besten geeigneten Speicherformats für die jeweilige Plattform. Unter Windows bedeutet dies die Systemregistrierung, unter macOS und iOS die CFPreferences-API und unter Unix textuelle Konfigurationsdateien im INI-Format. |
QSettings::Registry32Format | 2 | Nur Windows: Greifen Sie von einer 64-Bit-Anwendung, die auf einem 64-Bit-Windows läuft, explizit auf die 32-Bit-Systemregistrierung zu. Unter 32-Bit-Windows oder von einer 32-Bit-Anwendung unter 64-Bit-Windows funktioniert dies genauso wie die Angabe von NativeFormat. Dieser Enum-Wert wurde in Qt 5.7 hinzugefügt. |
QSettings::Registry64Format | 3 | Nur für Windows: Expliziter Zugriff auf die 64-Bit-Systemregistrierung von einer 32-Bit-Anwendung, die unter 64-Bit-Windows läuft. Unter 32-Bit-Windows oder von einer 64-Bit-Anwendung unter 64-Bit-Windows funktioniert dies genauso wie die Angabe von NativeFormat. Dieser Enum-Wert wurde in Qt 5.7 hinzugefügt. |
QSettings::IniFormat | 1 | Speichern Sie die Einstellungen in INI-Dateien. Beachten Sie, dass INI-Dateien die Unterscheidung zwischen numerischen Daten und den zu ihrer Kodierung verwendeten Strings verlieren, so dass als Zahlen geschriebene Werte als QString zurückgelesen werden müssen. |
QSettings::WebLocalStorageFormat | 4 | Nur WASM: Speichern Sie die Einstellungen in window.localStorage für den aktuellen Ursprung. Wenn Cookies nicht erlaubt sind, fällt dies auf das INI-Format zurück. Dies bietet bis zu 5MiB Speicherplatz pro Ursprung, aber der Zugriff darauf ist synchron und JSPI ist nicht erforderlich. |
QSettings::WebIndexedDBFormat | 5 | Nur WASM: Speichern Sie die Einstellungen in einer indizierten DB für den aktuellen Ursprung. Wenn Cookies nicht erlaubt sind, fällt dies auf das INI-Format zurück. Dies erfordert JSPI, bietet aber mehr Speicherplatz als WebLocalStorageFormat. |
QSettings::InvalidFormat | 16 | Spezieller Wert, der von registerFormat() zurückgegeben wird. |
Unter Unix bedeuten NativeFormat und IniFormat dasselbe, nur die Dateierweiterung ist anders (.conf
für NativeFormat, .ini
für IniFormat).
Das INI-Dateiformat ist ein Windows-Dateiformat, das von Qt auf allen Plattformen unterstützt wird. In Ermangelung eines INI-Standards versuchen wir, dem zu folgen, was Microsoft tut, mit den folgenden Ausnahmen:
- Wenn Sie Typen speichern, die QVariant nicht in QString konvertieren kann (z. B. QPoint, QRect und QSize), verwendet Qt eine
@
-basierte Syntax, um den Typ zu kodieren. Zum Beispiel:pos = @Point(100 100)
Um Kompatibilitätsprobleme zu minimieren, wird jedes
@
, das nicht an der ersten Position im Wert erscheint oder dem kein Qt-Typ folgt (Point
,Rect
,Size
, etc.), als normales Zeichen behandelt. - Obwohl der Backslash ein Sonderzeichen in INI-Dateien ist, werden Backslashes (
\
) in Dateipfaden von den meisten Windows-Anwendungen nicht als Escape-Zeichen verwendet:windir = C:\Windows
QSettings Der Backslash wird von Windows immer als Sonderzeichen behandelt und bietet keine API zum Lesen oder Schreiben solcher Einträge.
- Das INI-Dateiformat hat strenge Beschränkungen für die Syntax eines Schlüssels. Qt umgeht dies, indem es
%
als Escape-Zeichen in Schlüsseln verwendet. Wenn Sie außerdem eine Top-Level-Einstellung speichern (ein Schlüssel ohne Schrägstrich, z.B. "someKey"), erscheint sie im Abschnitt "General" der INI-Datei. Wenn Sie etwas mit einem Schlüssel wie "General/someKey" speichern, wird der Schlüssel im Abschnitt "%General" und nicht im Abschnitt "General" gespeichert, um das Überschreiben anderer Schlüssel zu vermeiden. - Im Einklang mit den meisten heutigen Implementierungen geht QSettings davon aus, dass die Werte in der INI-Datei utf-8-kodiert sind. Dies bedeutet, dass die Werte als utf-8 kodierte Einträge dekodiert und als utf-8 zurückgeschrieben werden. Um die Abwärtskompatibilität mit älteren Qt-Versionen zu erhalten, werden die Schlüssel in der INI-Datei im %-kodierten Format geschrieben, können aber sowohl im %-kodierten als auch im utf-8-Format gelesen werden.
Kompatibilität mit älteren Qt-Versionen
Bitte beachten Sie, dass sich dieses Verhalten von dem Verhalten von QSettings in Qt-Versionen vor Qt 6 unterscheidet. INI-Dateien, die mit Qt 5 oder früher geschrieben wurden, sind jedoch von einer Qt 6-basierten Anwendung vollständig lesbar (es sei denn, es wurde ein anderer INI-Codec als utf8 eingestellt). INI-Dateien, die mit Qt 6 geschrieben wurden, können von älteren Qt-Versionen nur gelesen werden, wenn Sie den "iniCodec" auf einen utf-8 Textcodec setzen.
Siehe auch registerFormat() und setPath().
QSettings::ReadFunc
Typedef für einen Zeiger auf eine Funktion mit der folgenden Signatur:
ReadFunc
wird in registerFormat()
als Zeiger auf eine Funktion verwendet, die einen Satz von Schlüssel/Wert-Paaren liest. ReadFunc
sollte alle Optionen in einem Durchgang lesen und alle Einstellungen im Container SettingsMap
zurückgeben, der anfangs leer ist.
Siehe auch WriteFunc und registerFormat().
enum QSettings::Scope
Diese Aufzählung gibt an, ob die Einstellungen benutzerspezifisch sind oder von allen Benutzern desselben Systems gemeinsam genutzt werden.
Konstante | Wert | Beschreibung |
---|---|---|
QSettings::UserScope | 0 | Einstellungen an einem Ort speichern, der für den aktuellen Benutzer spezifisch ist (z. B. im Home-Verzeichnis des Benutzers). |
QSettings::SystemScope | 1 | Einstellungen an einem globalen Ort speichern, so dass alle Benutzer auf demselben Rechner auf denselben Satz von Einstellungen zugreifen können. |
Siehe auch setPath().
QSettings::SettingsMap
Typedef für QMap<QString, QVariant>.
Siehe auch registerFormat().
enum QSettings::Status
Die folgenden Statuswerte sind möglich:
Konstante | Wert | Beschreibung |
---|---|---|
QSettings::NoError | 0 | Es ist kein Fehler aufgetreten. |
QSettings::AccessError | 1 | Ein Zugriffsfehler ist aufgetreten (z.B. beim Versuch, in eine schreibgeschützte Datei zu schreiben). |
QSettings::FormatError | 2 | Es ist ein Formatfehler aufgetreten (z.B. beim Laden einer fehlerhaften INI-Datei). |
Siehe auch status().
QSettings::WriteFunc
Typedef für einen Zeiger auf eine Funktion mit der folgenden Signatur:
WriteFunc
wird in registerFormat()
als Zeiger auf eine Funktion verwendet, die einen Satz von Schlüssel/Wert-Paaren schreibt. WriteFunc
wird nur einmal aufgerufen, so dass Sie die Einstellungen in einem Zug ausgeben müssen.
Siehe auch ReadFunc und registerFormat().
Dokumentation der Mitgliedsfunktionen
QVariant QSettings::value(QAnyStringView key) const
QVariant QSettings::value(QAnyStringView key, const QVariant &defaultValue) const
Gibt den Wert für die Einstellung key zurück. Wenn die Einstellung nicht vorhanden ist, wird defaultValue zurückgegeben.
Wenn kein Standardwert angegeben ist, wird QVariant zurückgegeben.
Beachten Sie, dass in der Windows-Registrierung und in INI-Dateien die Groß- und Kleinschreibung nicht beachtet wird, während die CFPreferences-API unter macOS und iOS die Groß- und Kleinschreibung beachtet. Um Portabilitätsprobleme zu vermeiden, lesen Sie die Section and Key Syntax Regeln.
Beispiel:
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
Hinweis: In Qt-Versionen vor 6.4 nahm diese Funktion QString und nicht QAnyStringView.
Siehe auch setValue(), contains(), und remove().
[explicit]
QSettings::QSettings(QObject *parent = nullptr)
Konstruiert ein QSettings-Objekt für den Zugriff auf Einstellungen der Anwendung und der Organisation, die zuvor mit einem Aufruf von QCoreApplication::setOrganizationName(), QCoreApplication::setOrganizationDomain() und QCoreApplication::setApplicationName() festgelegt wurden.
Der Geltungsbereich ist QSettings::UserScope und das Format ist defaultFormat() (QSettings::NativeFormat standardmäßig). Verwenden Sie setDefaultFormat(), bevor Sie diesen Konstruktor aufrufen, um das von diesem Konstruktor verwendete Standardformat zu ändern.
Der Code
QSettings settings("Moose Soft", "Facturo-Pro");
ist äquivalent zu
QCoreApplication::setOrganizationName("Moose Soft"); QCoreApplication::setApplicationName("Facturo-Pro"); QSettings settings;
Wenn QCoreApplication::setOrganizationName() und QCoreApplication::setApplicationName() nicht zuvor aufgerufen wurden, kann das QSettings-Objekt keine Einstellungen lesen oder schreiben, und status() gibt AccessError zurück.
Sie sollten sowohl die Domäne (standardmäßig auf macOS und iOS verwendet) als auch den Namen (standardmäßig anderswo verwendet) angeben, obwohl der Code damit zurechtkommt, wenn Sie nur einen Namen angeben, der dann (auf allen Plattformen) verwendet wird, was im Widerspruch zur üblichen Benennung der Datei auf Plattformen steht, für die dies nicht der Standard ist.
Siehe auch QCoreApplication::setOrganizationName(), QCoreApplication::setOrganizationDomain(), QCoreApplication::setApplicationName(), und setDefaultFormat().
[explicit]
QSettings::QSettings(QSettings::Scope scope, QObject *parent = nullptr)
Konstruiert ein QSettings-Objekt auf die gleiche Weise wie QSettings(QObject *parent), jedoch mit dem angegebenen scope.
Siehe auch QSettings(QObject *parent).
QSettings::QSettings(const QString &fileName, QSettings::Format format, QObject *parent = nullptr)
Konstruiert ein QSettings-Objekt für den Zugriff auf die Einstellungen, die in der Datei fileName gespeichert sind, mit dem übergeordneten parent. Wenn die Datei noch nicht vorhanden ist, wird sie erstellt.
Wenn format QSettings::NativeFormat ist, hängt die Bedeutung von fileName von der Plattform ab. Unter Unix ist fileName der Name einer INI-Datei. Unter macOS und iOS ist fileName der Name einer .plist
Datei. Unter Windows ist fileName ein Pfad in der Systemregistrierung.
Wenn format gleich QSettings::IniFormat ist, ist fileName der Name einer INI-Datei.
Warnung: Diese Funktion dient der Bequemlichkeit. Sie funktioniert gut für den Zugriff auf INI- oder .plist
-Dateien, die von Qt erzeugt wurden, kann aber bei einigen Syntaxen scheitern, die in solchen von anderen Programmen erzeugten Dateien zu finden sind. Beachten Sie insbesondere die folgenden Einschränkungen:
- QSettings bietet keine Möglichkeit, INI-"Pfad"-Einträge zu lesen, d.h. Einträge mit uneingekapselten Schrägstrichzeichen. (Das liegt daran, dass diese Einträge mehrdeutig sind und nicht automatisch aufgelöst werden können).
- In INI-Dateien verwendet QSettings das Zeichen
@
in einigen Kontexten als Metazeichen, um Qt-spezifische Datentypen zu kodieren (z.B.@Rect
), und könnte es daher falsch interpretieren, wenn es in reinen INI-Dateien auftritt.
Siehe auch fileName().
[explicit]
QSettings::QSettings(const QString &organization, const QString &application = QString(), QObject *parent = nullptr)
Konstruiert ein QSettings-Objekt für den Zugriff auf die Einstellungen der Anwendung mit dem Namen application aus der Organisation mit dem Namen organization und mit dem übergeordneten Objekt parent.
Beispiel:
QSettings settings("Moose Tech", "Facturo-Pro");
Der Geltungsbereich wird auf QSettings::UserScope und das Format auf QSettings::NativeFormat gesetzt (d.h. der Aufruf von setDefaultFormat() vor dem Aufruf dieses Konstruktors hat keine Auswirkungen).
Siehe auch setDefaultFormat() und Fallback Mechanism.
QSettings::QSettings(QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = nullptr)
Konstruiert ein QSettings-Objekt für den Zugriff auf die Einstellungen der Anwendung mit dem Namen application aus der Organisation mit dem Namen organization und mit dem übergeordneten Objekt parent.
Wenn scope gleich QSettings::UserScope ist, sucht das QSettings-Objekt zuerst nach benutzerspezifischen Einstellungen, bevor es als Fallback nach systemweiten Einstellungen sucht. Wenn scope gleich QSettings::SystemScope ist, ignoriert das QSettings-Objekt die benutzerspezifischen Einstellungen und ermöglicht den Zugriff auf systemweite Einstellungen.
Das Speicherformat wird auf QSettings::NativeFormat gesetzt (d.h. der Aufruf von setDefaultFormat() vor dem Aufruf dieses Konstruktors hat keine Auswirkungen).
Wenn kein Anwendungsname angegeben wird, greift das QSettings-Objekt nur auf die organisationsweite locations zu.
Siehe auch setDefaultFormat().
QSettings::QSettings(QSettings::Format format, QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = nullptr)
Konstruiert ein QSettings-Objekt für den Zugriff auf die Einstellungen der Anwendung mit dem Namen application aus der Organisation mit dem Namen organization und mit dem übergeordneten Objekt parent.
Wenn scope gleich QSettings::UserScope ist, sucht das QSettings-Objekt zuerst nach benutzerspezifischen Einstellungen, bevor es als Fallback nach systemweiten Einstellungen sucht. Wenn scope gleich QSettings::SystemScope ist, ignoriert das QSettings-Objekt die benutzerspezifischen Einstellungen und ermöglicht den Zugriff auf systemweite Einstellungen.
Wenn format gleich QSettings::NativeFormat ist, wird die systemeigene API zum Speichern von Einstellungen verwendet. Wenn format gleich QSettings::IniFormat ist, wird das INI-Format verwendet.
Wenn kein Anwendungsname angegeben wird, greift das QSettings-Objekt nur auf die organisationsweite locations zu.
[virtual noexcept]
QSettings::~QSettings()
Zerstört das Objekt QSettings.
Alle nicht gespeicherten Änderungen werden schließlich in den permanenten Speicher geschrieben.
Siehe auch sync().
QStringList QSettings::allKeys() const
Gibt eine Liste aller Schlüssel, einschließlich der Unterschlüssel, zurück, die mit dem Objekt QSettings gelesen werden können.
Beispiel:
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"]
Wenn eine Gruppe mit beginGroup() festgelegt wird, werden nur die Schlüssel in der Gruppe zurückgegeben, ohne den Gruppenpräfix:
settings.beginGroup("fridge"); keys = settings.allKeys(); // keys: ["color", "size"]
Siehe auch childGroups() und childKeys().
QString QSettings::applicationName() const
Gibt den Anwendungsnamen zurück, der für die Speicherung der Einstellungen verwendet wird.
Siehe auch QCoreApplication::applicationName(), format(), scope(), und organizationName().
void QSettings::beginGroup(QAnyStringView prefix)
Hängt prefix an die aktuelle Gruppe an.
Die aktuelle Gruppe wird automatisch allen Schlüsseln vorangestellt, die in QSettings angegeben sind. Außerdem basieren Abfragefunktionen wie childGroups(), childKeys() und allKeys() auf der Gruppe. Standardmäßig ist keine Gruppe festgelegt.
Gruppen sind nützlich, um zu vermeiden, dass immer wieder die gleichen Einstellungspfade eingegeben werden. Ein Beispiel:
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();
Damit wird der Wert von drei Einstellungen festgelegt:
mainwindow/size
mainwindow/fullScreen
outputpanel/visible
Rufen Sie endGroup() auf, um die aktuelle Gruppe auf den Wert vor dem entsprechenden beginGroup()-Aufruf zurückzusetzen. Gruppen können verschachtelt werden.
Hinweis: In Qt-Versionen vor 6.4 nahm diese Funktion QString und nicht QAnyStringView.
Siehe auch endGroup() und group().
int QSettings::beginReadArray(QAnyStringView prefix)
Fügt prefix zur aktuellen Gruppe hinzu und beginnt, aus einem Array zu lesen. Gibt die Größe des Arrays zurück.
Beispiel:
struct Login { QString userName; QString password; }; QList<Login> logins; ... QSettings settings; int size = settings.beginReadArray("logins"); for (int i = 0; i < size; ++i) { settings.setArrayIndex(i); Login login; login.userName = settings.value("userName").toString(); login.password = settings.value("password").toString(); logins.append(login); } settings.endArray();
Verwenden Sie beginWriteArray(), um das Array überhaupt erst zu schreiben.
Hinweis: In Qt-Versionen vor 6.4 nahm diese Funktion QString, nicht QAnyStringView.
Siehe auch beginWriteArray(), endArray(), und setArrayIndex().
void QSettings::beginWriteArray(QAnyStringView prefix, int size = -1)
Fügt prefix zur aktuellen Gruppe hinzu und beginnt mit dem Schreiben eines Arrays der Größe size. Wenn size -1 ist (Standard), wird es automatisch anhand der Indizes der geschriebenen Einträge bestimmt.
Wenn Sie viele Vorkommen einer bestimmten Gruppe von Schlüsseln haben, können Sie Arrays verwenden, um sich das Leben zu erleichtern. Nehmen wir zum Beispiel an, dass Sie eine Liste von Benutzernamen und Passwörtern mit variabler Länge speichern wollen. Sie könnten dann schreiben:
struct Login { QString userName; QString password; }; QList<Login> logins; ... QSettings settings; settings.beginWriteArray("logins"); for (qsizetype i = 0; i < logins.size(); ++i) { settings.setArrayIndex(i); settings.setValue("userName", logins.at(i).userName); settings.setValue("password", logins.at(i).password); } settings.endArray();
Die erzeugten Schlüssel haben die Form
logins/size
logins/1/userName
logins/1/password
logins/2/userName
logins/2/password
logins/3/userName
logins/3/password
- ...
Um ein Array zurückzulesen, verwenden Sie beginReadArray().
Hinweis: In Qt-Versionen vor 6.4 nahm diese Funktion QString und nicht QAnyStringView.
Siehe auch beginReadArray(), endArray(), und setArrayIndex().
QStringList QSettings::childGroups() const
Gibt eine Liste aller Schlüssel-Top-Level-Gruppen zurück, die Schlüssel enthalten, die mit dem Objekt QSettings gelesen werden können.
Beispiel:
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"]
Wenn eine Gruppe mit beginGroup() gesetzt wird, werden die Schlüssel der ersten Ebene in dieser Gruppe zurückgegeben, ohne das Gruppenpräfix.
settings.beginGroup("fridge"); groups = settings.childGroups(); // groups: []
Sie können mit childKeys() und childGroups() rekursiv durch die gesamte Einstellungshierarchie navigieren.
Siehe auch childKeys() und allKeys().
QStringList QSettings::childKeys() const
Gibt eine Liste aller Schlüssel der obersten Ebene zurück, die mit dem Objekt QSettings gelesen werden können.
Beispiel:
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"]
Wenn eine Gruppe mit beginGroup() gesetzt wird, werden die Schlüssel der obersten Ebene in dieser Gruppe zurückgegeben, ohne das Gruppenpräfix:
settings.beginGroup("fridge"); keys = settings.childKeys(); // keys: ["color", "size"]
Sie können mit childKeys() und childGroups() rekursiv durch die gesamte Einstellungshierarchie navigieren.
Siehe auch childGroups() und allKeys().
void QSettings::clear()
Entfernt alle Einträge im primären Speicherort, der mit diesem QSettings Objekt verknüpft ist.
Einträge in Ausweichorten werden nicht entfernt.
Wenn Sie nur die Einträge im aktuellen group() entfernen wollen, verwenden Sie stattdessen remove("").
Siehe auch remove() und setFallbacksEnabled().
bool QSettings::contains(QAnyStringView key) const
Gibt true
zurück, wenn es eine Einstellung namens key gibt; andernfalls wird false zurückgegeben.
Wenn eine Gruppe mit beginGroup() festgelegt wurde, wird key als relativ zu dieser Gruppe betrachtet.
Beachten Sie, dass in der Windows-Registrierung und in INI-Dateien zwischen Groß- und Kleinschreibung unterschieden wird, während in der CFPreferences-API unter macOS und iOS zwischen Groß- und Kleinschreibung unterschieden wird. Um Portabilitätsprobleme zu vermeiden, siehe die Section and Key Syntax Regeln.
Hinweis: In Qt-Versionen vor 6.4 nahm diese Funktion QString und nicht QAnyStringView.
Siehe auch value() und setValue().
[static]
QSettings::Format QSettings::defaultFormat()
Gibt das Standard-Dateiformat zurück, das zum Speichern der Einstellungen für den Konstruktor QSettings(QObject *) verwendet wird. Wenn kein Standardformat festgelegt ist, wird QSettings::NativeFormat verwendet.
Siehe auch setDefaultFormat() und format().
void QSettings::endArray()
Schließt das Array, das mit beginReadArray() oder beginWriteArray() gestartet wurde.
Siehe auch beginReadArray() und beginWriteArray().
void QSettings::endGroup()
Setzt die Gruppe auf den Stand vor dem entsprechenden beginGroup()-Aufruf zurück.
Beispiel:
settings.beginGroup("alpha"); // settings.group() == "alpha" settings.beginGroup("beta"); // settings.group() == "alpha/beta" settings.endGroup(); // settings.group() == "alpha" settings.endGroup(); // settings.group() == ""
Siehe auch beginGroup() und group().
[override virtual protected]
bool QSettings::event(QEvent *event)
Reimplements: QObject::event(QEvent *e).
bool QSettings::fallbacksEnabled() const
Gibt true
zurück, wenn Fallbacks aktiviert sind; andernfalls false
.
Standardmäßig sind Fallbacks aktiviert.
Siehe auch setFallbacksEnabled().
QString QSettings::fileName() const
Gibt den Pfad zurück, in dem die mit diesem QSettings Objekt geschriebenen Einstellungen gespeichert sind.
Unter Windows, wenn das Format QSettings::NativeFormat ist, ist der Rückgabewert ein Systemregistrierungspfad, kein Dateipfad.
Siehe auch isWritable() und format().
QSettings::Format QSettings::format() const
Gibt das für die Speicherung der Einstellungen verwendete Format zurück.
Siehe auch defaultFormat(), fileName(), scope(), organizationName(), und applicationName().
QString QSettings::group() const
Gibt die aktuelle Gruppe zurück.
Siehe auch beginGroup() und endGroup().
bool QSettings::isAtomicSyncRequired() const
Gibt true
zurück, wenn QSettings nur das atomare Speichern und erneute Laden (Synchronisation) der Einstellungen erlaubt ist. Gibt false
zurück, wenn es erlaubt ist, den Inhalt der Einstellungen direkt in der Konfigurationsdatei zu speichern.
Die Vorgabe ist true
.
Siehe auch setAtomicSyncRequired() und QSaveFile.
bool QSettings::isWritable() const
Gibt true
zurück, wenn Einstellungen mit diesem QSettings Objekt geschrieben werden können; andernfalls false
.
Ein Grund, warum isWritable() false zurückgeben könnte, ist, wenn QSettings mit einer schreibgeschützten Datei arbeitet.
Warnung: Diese Funktion ist nicht absolut zuverlässig, da sich die Dateiberechtigungen jederzeit ändern können.
Siehe auch fileName(), status(), und sync().
QString QSettings::organizationName() const
Gibt den Organisationsnamen zurück, der für die Speicherung der Einstellungen verwendet wird.
Siehe auch QCoreApplication::organizationName(), format(), scope(), und applicationName().
[static]
QSettings::Format QSettings::registerFormat(const QString &extension, QSettings::ReadFunc readFunc, QSettings::WriteFunc writeFunc, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive)
Registiert ein benutzerdefiniertes Speicherformat. Bei Erfolg wird ein spezieller Formatwert zurückgegeben, der dann an den QSettings Konstruktor übergeben werden kann. Im Fehlerfall wird InvalidFormat zurückgegeben.
extension ist die Dateierweiterung, die dem Format zugeordnet ist (ohne das '.').
Die Parameter readFunc und writeFunc sind Zeiger auf Funktionen, die einen Satz von Schlüssel/Wert-Paaren lesen und schreiben. Der Parameter QIODevice für die Lese- und Schreibfunktionen wird immer im Binärmodus geöffnet (d. h. ohne das Flag QIODeviceBase::Text ).
Der Parameter caseSensitivity gibt an, ob bei den Schlüsseln zwischen Groß- und Kleinschreibung unterschieden wird oder nicht. Dies macht einen Unterschied bei der Suche nach Werten mit QSettings. Die Standardeinstellung ist Groß- und Kleinschreibung.
Wenn Sie einen der Konstruktoren verwenden, die mit einem Organisationsnamen und einem Anwendungsnamen arbeiten, werden standardmäßig die gleichen Dateisystempositionen wie bei IniFormat verwendet. Verwenden Sie setPath(), um andere Speicherorte anzugeben.
Beispiel:
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"); ... }
Hinweis: Diese Funktion ist thread-sicher.
Siehe auch setPath().
void QSettings::remove(QAnyStringView key)
Entfernt die Einstellung key und alle Untereinstellungen von key.
Beispiel:
QSettings settings; settings.setValue("ape"); settings.setValue("monkey", 1); settings.setValue("monkey/sea", 2); settings.setValue("monkey/doe", 4); settings.remove("monkey"); QStringList keys = settings.allKeys(); // keys: ["ape"]
Beachten Sie, dass, wenn einer der Ausweichorte eine Einstellung mit demselben Schlüssel enthält, diese Einstellung nach dem Aufruf von remove() sichtbar sein wird.
Wenn key eine leere Zeichenkette ist, werden alle Schlüssel in der aktuellen group() entfernt. Ein Beispiel:
QSettings settings; settings.setValue("ape"); settings.setValue("monkey", 1); settings.setValue("monkey/sea", 2); settings.setValue("monkey/doe", 4); settings.beginGroup("monkey"); settings.remove(""); settings.endGroup(); QStringList keys = settings.allKeys(); // keys: ["ape"]
Beachten Sie, dass in der Windows-Registrierung und in INI-Dateien zwischen Groß- und Kleinschreibung unterschieden wird, während in der CFPreferences-API unter macOS und iOS zwischen Groß- und Kleinschreibung unterschieden wird. Um Portabilitätsprobleme zu vermeiden, lesen Sie bitte die Section and Key Syntax Regeln.
Hinweis: In Qt-Versionen vor 6.4 nahm diese Funktion QString und nicht QAnyStringView.
Siehe auch setValue(), value(), und contains().
QSettings::Scope QSettings::scope() const
Gibt den für die Speicherung der Einstellungen verwendeten Bereich zurück.
Siehe auch format(), organizationName(), und applicationName().
void QSettings::setArrayIndex(int i)
Setzt den aktuellen Array-Index auf i. Aufrufe von Funktionen wie setValue(), value(), remove() und contains() wirken auf den Array-Eintrag bei diesem Index.
Sie müssen beginReadArray() oder beginWriteArray() aufrufen, bevor Sie diese Funktion aufrufen können.
void QSettings::setAtomicSyncRequired(bool enable)
Legt fest, ob QSettings erforderlich ist, um die Einstellungen atomar zu speichern und neu zu laden (Synchronisierung). Wenn das Argument enable true
ist (Standard), führt sync() nur Synchronisationsvorgänge durch, die atomar sind. Wenn dies nicht möglich ist, schlägt sync() fehl und status() stellt eine Fehlerbedingung dar.
Wenn Sie diese Eigenschaft auf false
setzen, kann QSettings direkt in die Konfigurationsdatei schreiben und alle Fehler ignorieren, die beim Versuch auftreten, die Datei gegen andere Prozesse zu sperren, die zur gleichen Zeit zu schreiben versuchen. Wegen der möglichen Beschädigung sollte diese Option mit Vorsicht verwendet werden, ist aber unter bestimmten Bedingungen erforderlich, wie z.B. bei einer QSettings::IniFormat Konfigurationsdatei, die sich in einem ansonsten nicht beschreibbaren Verzeichnis befindet oder bei NTFS Alternate Data Streams.
Siehe QSaveFile für weitere Informationen über diese Funktion.
Siehe auch isAtomicSyncRequired() und QSaveFile.
[static]
void QSettings::setDefaultFormat(QSettings::Format format)
Setzt das Standard-Dateiformat auf das angegebene format, das zum Speichern von Einstellungen für den QSettings(QObject *) Konstruktor verwendet wird.
Wenn kein Standardformat festgelegt ist, wird QSettings::NativeFormat verwendet. Sehen Sie in der Dokumentation des von Ihnen verwendeten QSettings Konstruktors nach, ob dieser diese Funktion ignoriert.
Siehe auch defaultFormat() und format().
void QSettings::setFallbacksEnabled(bool b)
Legt fest, ob Fallbacks auf b aktiviert sind.
Standardmäßig sind Fallbacks aktiviert.
Siehe auch fallbacksEnabled().
[static]
void QSettings::setPath(QSettings::Format format, QSettings::Scope scope, const QString &path)
Setzt den Pfad, der zum Speichern der Einstellungen für die angegebenen format und scope verwendet wird, auf path. format kann ein benutzerdefiniertes Format sein.
In der folgenden Tabelle sind die Standardwerte zusammengefasst:
Plattform | Format | Umfang | Pfad |
---|---|---|---|
Windows | IniFormat | UserScope | FOLDERID_RoamingAppData |
SystemScope | FOLDERID_ProgramData | ||
Unix | NativeFormat, IniFormat | UserScope | $HOME/.config |
SystemScope | /etc/xdg | ||
macOS und iOS | IniFormat | UserScope | $HOME/.config |
SystemScope | /etc/xdg |
Die Standardpfade UserScope unter Unix, macOS und iOS ($HOME/.config
oder $HOME/Settings) können vom Benutzer durch Setzen der Umgebungsvariablen XDG_CONFIG_HOME
überschrieben werden. Die Standardpfade SystemScope unter Unix, macOS und iOS (/etc/xdg
) können bei der Erstellung der Qt-Bibliothek mit dem -sysconfdir
-Flag des Skripts configure
überschrieben werden (siehe QLibraryInfo für Details).
Das Setzen der NativeFormat Pfade unter Windows, macOS und iOS hat keinen Effekt.
Warnung: Diese Funktion hat keinen Einfluss auf bestehende QSettings Objekte.
Siehe auch registerFormat().
void QSettings::setValue(QAnyStringView key, const QVariant &value)
Setzt den Wert der Einstellung key auf value. Wenn key bereits existiert, wird der vorherige Wert überschrieben.
Beachten Sie, dass in der Windows-Registrierung und in INI-Dateien zwischen Groß- und Kleinschreibung nicht unterschieden wird, während in der CFPreferences-API unter macOS und iOS zwischen Groß- und Kleinschreibung unterschieden wird. Um Portabilitätsprobleme zu vermeiden, lesen Sie die Section and Key Syntax Regeln.
Beispiel:
QSettings settings; settings.setValue("interval", 30); settings.value("interval").toInt(); // returns 30 settings.setValue("interval", 6.55); settings.value("interval").toDouble(); // returns 6.55
Hinweis: In Qt-Versionen vor 6.4 nahm diese Funktion QString und nicht QAnyStringView.
Siehe auch value(), remove(), und contains().
QSettings::Status QSettings::status() const
Gibt einen Statuscode zurück, der den ersten Fehler angibt, der bei QSettings aufgetreten ist, oder QSettings::NoError, wenn kein Fehler aufgetreten ist.
Beachten Sie, dass QSettings die Ausführung einiger Operationen verzögert. Aus diesem Grund sollten Sie sync() aufrufen, um sicherzustellen, dass die in QSettings gespeicherten Daten auf die Festplatte geschrieben werden, bevor Sie status() aufrufen.
Siehe auch sync().
void QSettings::sync()
Schreibt alle nicht gespeicherten Änderungen in den permanenten Speicher und lädt alle Einstellungen neu, die in der Zwischenzeit von einer anderen Anwendung geändert wurden.
Diese Funktion wird automatisch vom Destruktor von QSettings und von der Ereignisschleife in regelmäßigen Abständen aufgerufen, so dass Sie sie normalerweise nicht selbst aufrufen müssen.
Siehe auch status().
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.