Auf dieser Seite

Dateneingabe und -ausgabe

Diese Seite bietet einen Überblick über verschiedene Möglichkeiten, Daten mit Qt abzurufen und zu speichern.

Speichern und Laden von Daten

Die Klasse „ QIODevice “ ist die Basisklasse für alle Datei- und Datenspeichergeräte in Qt Core. Alle Klassen, die zum Lesen und Schreiben von Daten verwendet werden, erben von ihr.

Beispiele für Geräte sind „ QFile “, „ QBuffer “, „ QTcpSocket “ und „ QProcess “. „ QFile “ wird zum Lesen und Schreiben von Text, Binärdateien und Ressourcen mithilfe der Schnittstelle „ QIODevice “ verwendet. Ein „ QFile “ kann für sich allein oder – was praktischer ist – zusammen mit einem „ QTextStream “ oder „ QDataStream “ verwendet werden.

Die Klasse „ QBuffer “ stellt eine Schnittstelle „ QIODevice “ für „ QByteArray “ bereit. „ QTcpSocket “ ermöglicht es dem Entwickler, eine TCP-Verbindung herzustellen und Datenströme zu übertragen. „ QProcess “ wird verwendet, um externe Programme zu starten sowie Daten aus diesem Prozess zu lesen und in diesen zu schreiben.

Serialisierte Daten

Die Qt-API bietet Unterstützung für die Datenserialisierung in verschiedenen Anwendungsfällen.

  • DieJSON- Unterstützung in Qt bietet eine benutzerfreundliche C++-API zum Parsen, Ändern und Speichern von JSON-Daten
  • QDataStream Die Klasse ermöglicht die Serialisierung binärer Daten in ein QIODevice
  • Qt XML C++ Classes C++-Implementierungen der XML-Streaming- und DOM-Standards für XML bereitzustellen

Datenbank

Das Qt SQL Modul nutzt Treiber-Plugins zur Kommunikation mit verschiedenen Datenbank-APIs. Qt verfügt über Treiber für SQLite, MySQL, DB2, Borland InterBase, Oracle, ODBC und PostgreSQL. Es ist auch möglich, einen eigenen Treiber zu entwickeln, falls Qt den benötigten Treiber nicht bereitstellt.

Die SQL-Klassen von Qt lassen sich in drei Schichten unterteilen:

EbeneZweckBeispielklasse
  • Treiber-Ebene
  • SQL-API-Ebene
  • Benutzeroberflächen-Schicht
  • Low-Level-Kommunikation zwischen der Datenbank und der SQL-API-Schicht
  • Zugriff auf Datenbanken bereitstellen
  • Daten aus einer Datenbank mit datengebundenen Widgets verknüpfen

Mit allen SQL-Treibern, mit Ausnahme von SQLite, können Sie eine Verbindung zu einem Server herstellen, auf dem Ihr Datenbanksystem gehostet wird. Wenn Sie den eingebetteten MySQL-Server verwenden, benötigen Sie keinen MySQL-Server, um dieses Datenbanksystem zu nutzen.

Anleitungen zum Erstellen der SQL-Datenbanktreiber finden Sie unter „SQL-Datenbanktreiber“.

Das Qt-SQLite-Plugin eignet sich sehr gut für die lokale Speicherung. SQLite ist ein relationales Datenbankmanagementsystem, das in einer kleinen (~350 KiB) C-Bibliothek enthalten ist. Im Gegensatz zu anderen Datenbankmanagementsystemen ist SQLite kein separater Prozess, auf den von der Client-Anwendung aus zugegriffen wird, sondern ein integraler Bestandteil derselben. SQLite arbeitet mit einer einzigen Datei, die beim Öffnen einer Verbindung als Datenbankname angegeben werden muss. Falls die Datei nicht existiert, versucht SQLite, sie zu erstellen.

SQLite unterliegt einigen Einschränkungen hinsichtlich mehrerer Benutzer und mehrerer Transaktionen. Wenn Sie aus verschiedenen Transaktionen heraus auf eine Datei lesen oder schreiben, kann es vorkommen, dass Ihre Anwendung blockiert, bis eine Transaktion abgeschlossen oder zurückgesetzt wird.

Sobald der Treiberteil eingerichtet ist, kann auf die Daten über die Klassen „ QSqlQueryModel “, „ QSqlTableModel “ und „ QSqlRelationalTableModel “ zugegriffen werden. „ QSqlTableModel “ und „ QSqlRelationalTableModel “ stellen bearbeitbare Modelle bereit, die mit den Item-Ansichten von Qt verwendet werden können. „ QSqlTableModel “ verfügt über Lese-/Schreibzugriff auf eine einzelne Tabelle, während „ QSqlRelationalTableModel “ Lese-/Schreibzugriff auf die Haupttabelle hat (nicht auf die Tabelle mit dem Fremdschlüssel).

Die folgenden Seiten enthalten Informationen zur Einbindung von SQL in Anwendungen:

XML-Unterstützung in Qt

Qt stellt APIs zum Lesen und Parsen von XML-Streams sowie zum Schreiben in diese Streams bereit. Die folgenden Schlüsselklassen erleichtern diese Vorgänge, indem sie die erforderliche Infrastruktur bereitstellen:

  • QDomDocument Die Klasse `class` stellt das gesamte XML-Dokument als Dokumentbaum dar und bietet den primären Zugriff auf die Daten des Dokuments.
  • QXmlStreamReader Die Klasse stellt einen Parser zum Einlesen von XML bereit. Es handelt sich um einen Parser für wohlgeformtes XML 1.0, der keine externen geparsten Entitäten einbezieht.
    • Er erkennt und verarbeitet XML-Namespaces. Im Fall eines `StartElement`-Elements gibt beispielsweise `namespaceUri()` den Namespace zurück, in dem sich das Element befindet, und `name()` gibt den lokalen Namen des Elements zurück. Die Kombination aus `namespaceUri()` und `name()` identifiziert ein Element eindeutig.
    • Er ist nicht rechenintensiv, da er nicht den gesamten XML-Dokumentbaum im Speicher ablegt. Er speichert lediglich das aktuelle Token zum Zeitpunkt seiner Meldung.
  • Die Klasse „ QXmlStreamWriter “ stellt einem XML-Writer eine einfache Streaming-API zur Verfügung. Sie ist das Gegenstück zu „ QXmlStreamReader “ für das Schreiben von XML und arbeitet mit einem „ QIODevice “, der mit „setDevice()“ festgelegt wird.
    • Es handelt sich um eine einfache API, die für jedes XML-Token oder -Ereignis, das Sie schreiben möchten, eine eigene Funktion bereitstellt.
    • Sie übernimmt das Voranstellen von Namespaces basierend auf der beim Schreiben von Elementen oder Attributen angegebenen `namespaceUri`. Wenn Sie bestimmte standardisierte Präfixe verwenden müssen, können Sie den Writer dazu zwingen, diese zu verwenden, indem Sie die Namespaces manuell entweder mit `writeNamespace()` oder `writeDefaultNamespace()` deklarieren.
    • Er kann die generierten XML-Daten automatisch formatieren, indem er Zeilenumbrüche und Einrückungen hinzufügt, wodurch sie besser lesbar werden. Diese Funktion lässt sich über die Eigenschaft „auto-formatting“ aktivieren.

Die folgenden Themen bieten weitere Einblicke in die Unterstützung von „ Qt XML “:

JSON in Qt

JSON ist ein textbasierter offener Standard für den Datenaustausch, der leicht zu lesen und zu parsen ist. Er wird zur Darstellung einfacher Datenstrukturen und assoziativer Arrays, sogenannter Objekte, verwendet. Er ist mit JavaScript verwandt, stellt jedoch eine sprachunabhängige Notationsform dar.

Ein Objekt kann zwei Formen annehmen:

Sammlung von Name-Wert-PaarenGeordnete Liste von Werten
{
          "last_name": "Routledge",
          "first_name": "Ronald",
          "birth_date": 1960
}
"colors": ["green", "blue", "yellow"]

Lokaler Speicher

Die Local-Storage-API ermöglicht den Zugriff auf den lokalen Offline-Speicher in einer SQL-Datenbank aus QML und JavaScript heraus.

Diese Datenbanken sind benutzerspezifisch und QML-spezifisch, stehen jedoch allen QML-Anwendungen zur Verfügung. Sie werden im Unterverzeichnis „Databases“ von `QDeclarativeEngine::offlineStoragePath()` als SQLite-Datenbanken (SQL-Datenbanktreiber) gespeichert.

Die API entspricht der synchronen API der HTML5-Webdatenbank-API, W3C-Arbeitsentwurf vom 29. Oktober 2009 (HTML5-Webdatenbank-API).

Eine grundlegende Demonstration der Verwendung der Local-Storage-API finden Sie unter „Qt Quick -Beispiele – Lokaler Speicher “.

Klasse „QSettings“

Die Klasse „ QSettings “ ermöglicht die dauerhafte Speicherung von Anwendungseinstellungen. Eine Anwendung behält in der Regel ihre Einstellungen aus der vorherigen Sitzung bei.

Die Speicherung der Einstellungen erfolgt je nach Plattform unterschiedlich. Unter Windows werden sie beispielsweise in der Registrierung gespeichert, während sie unter macOS in XML-Dateien abgelegt werden.

QSettings ermöglichen es Ihnen, Anwendungseinstellungen portabel zu speichern und wiederherzustellen. Das Erstellen und Auflösen eines ` QSettings `-Objekts ist ressourcenschonend und schnell. Beim Erstellen eines Objekts von ` QSettings` empfiehlt es sich, nicht nur den Namen der Anwendung, sondern auch den Namen Ihrer Organisation anzugeben. Zum Beispiel:

QSettings settings("MyCompany", "Accountancy");

Ressourcen

Das Qt-Ressourcensystem ist ein plattformunabhängiger Mechanismus zum Speichern von Binärdateien in der ausführbaren Datei der Anwendung. Dies ist praktisch, wenn Ihre Anwendung häufig eine bestimmte Datei oder eine Reihe von Dateien benötigt. Außerdem schützt es vor dem Verlust dieser bestimmten Datei.

Ressourcendaten können entweder in die Binärdatei kompiliert und sofort im Anwendungscode abgerufen werden, oder eine binäre Ressource kann dynamisch erstellt und von der Anwendung im Ressourcensystem registriert werden.

Standardmäßig sind Ressourcen im Anwendungscode unter demselben Dateinamen zugänglich, unter dem sie im Quellcode-Verzeichnis gespeichert sind – mit dem Präfix „ :/ “ – oder über eine URL mit dem Schema „qrc“.

Konnektivität

Dateiarchivierung

Eine Archivdatei ist eine Sammlung von Dateien oder Verzeichnissen, die in der Regel komprimiert werden, um den Speicherplatz zu reduzieren, den sie andernfalls auf einem Laufwerk beanspruchen würden. Beispiele für Archivdateien sind ZIP, TAR, RAR und 7z.

Qt unterstützt Archive, die mit zlib erstellt wurden (siehe qCompress() und qUncompress()).

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