Dateneingabe Ausgabe

Diese Seite gibt einen Überblick über die verschiedenen 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 unter Verwendung der Schnittstelle QIODevice verwendet. Ein QFile kann allein oder, was bequemer ist, mit einem QTextStream oder QDataStream verwendet werden.

Die Klasse QBuffer stellt eine Schnittstelle QIODevice für QByteArray zur Verfügung. QTcpSocket ermöglicht es dem Entwickler, eine TCP-Verbindung aufzubauen und Datenströme zu übertragen. QProcess wird verwendet, um externe Programme zu starten und von diesen Prozessen zu lesen und zu schreiben.

Serialisierte Daten

Die Qt-API bietet Unterstützung für die Serialisierung von Daten für verschiedene Anwendungsfälle.

Datenbank

Das Qt SQL Modul verwendet Treiber-Plugins, um mit verschiedenen Datenbank-APIs zu kommunizieren. 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, wenn Qt den benötigten Treiber nicht bereitstellt.

Die SQL-Klassen von Qt können in 3 Schichten unterteilt werden:

SchichtZweckBeispielklasse
  • Treiber-Schicht
  • SQL-API-Schicht
  • Benutzerschnittstellenschicht
  • Kommunikation auf niedriger Ebene zwischen der Datenbank und der SQL-API-Schicht
  • Ermöglicht den Zugriff auf Datenbanken
  • Verknüpfung von Daten aus einer Datenbank mit datenorientierten Widgets

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

Eine Anleitung zur Erstellung der SQL-Datenbanktreiber finden Sie unter SQL-Datenbanktreiber.

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

SQLite hat einige Einschränkungen in Bezug auf mehrere Benutzer und mehrere Transaktionen. Wenn Sie in einer Datei aus verschiedenen Transaktionen lesen oder schreiben, kann Ihre Anwendung einfrieren, bis eine Transaktion festgeschrieben oder zurückgesetzt wird.

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

Auf den folgenden Seiten finden Sie Informationen über die Einbindung von SQL in Anwendungen:

XML-Unterstützung in Qt

Qt bietet APIs zum Lesen und Parsen von XML-Streams und zum Schreiben in diese Streams. Die folgenden Schlüsselklassen erleichtern diese Aktionen, indem sie die notwendige Infrastruktur bereitstellen:

  • QDomDocument Die Klasse XML repräsentiert das gesamte XML-Dokument als Dokumentenbaum und bietet primären Zugriff auf die Daten des Dokuments.
  • QXmlStreamReader Klasse bietet einen Parser zum Lesen von XML. Es handelt sich um einen wohlgeformten XML 1.0-Parser, der keine externen geparsten Entitäten enthält.
    • Er versteht und löst XML-Namespaces auf. Im Falle eines StartElements beispielsweise gibt namespaceUri() den Namespace zurück, in dem sich das Element befindet, und name() gibt den lokalen Namen des Elements zurück. Die Kombination von namespaceUri() und name() identifiziert ein Element eindeutig.
    • Sie ist nicht rechenintensiv, da sie nicht den gesamten XML-Dokumentenbaum im Speicher speichert. Es wird nur das aktuelle Token zum Zeitpunkt der Meldung gespeichert.
  • Die Klasse QXmlStreamWriter bietet einen XML-Writer mit einer einfachen Streaming-API. Sie ist das Gegenstück zu QXmlStreamReader für das Schreiben von XML und arbeitet mit einem QIODevice, das mit setDevice() angegeben 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 kümmert sich um die Präfixierung von Namespaces auf der Grundlage der beim Schreiben von Elementen oder Attributen angegebenen namespaceUri. Wenn Sie bestimmte standardisierte Präfixe verwenden müssen, können Sie den Writer zwingen, diese zu verwenden, indem Sie die Namespaces entweder mit writeNamespace() oder writeDefaultNamespace() manuell deklarieren.
    • Er kann die generierten XML-Daten automatisch formatieren, indem er Zeilenumbrüche und Einrückungen hinzufügt, um sie lesbar zu machen. Diese Funktion kann mit der Eigenschaft auto-formatting aktiviert werden.

Die folgenden Themen geben weitere Einblicke in die Unterstützung von Qt XML:

JSON in Qt

JSON ist ein textbasierter offener Standard für den Datenaustausch, der einfach zu lesen und zu analysieren ist. Er wird für die Darstellung einfacher Datenstrukturen und assoziativer Arrays, sogenannter Objekte, verwendet. Es ist mit JavaScript verwandt, ist aber eine sprachunabhängige Notationsform.

Ein Objekt kann 2 Formen annehmen:

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

Lokale Speicherung

Die Local Storage API bietet die Möglichkeit, von QML und JavaScript aus auf lokalen Offline-Speicher in einer SQL-Datenbank zuzugreifen.

Diese Datenbanken sind benutzerspezifisch und QML-spezifisch, aber für alle QML-Anwendungen zugänglich. Sie werden im Unterverzeichnis Databases von QDeclarativeEngine::offlineStoragePath() als SQLite-Datenbanken(SQL Database Drivers) gespeichert.

Die API ist konform mit der Synchronous API der HTML5 Web Database API, W3C Working Draft 29 October 2009(HTML5 Web Database API).

Siehe Qt Quick Beispiele - Lokale Speicherung für eine grundlegende Demonstration der Verwendung der lokalen Speicher-API.

QSettings-Klasse

Die Klasse QSettings ermöglicht die dauerhafte Speicherung von Anwendungseinstellungen. Eine Anwendung merkt sich in der Regel ihre Einstellungen von der vorherigen Sitzung.

Die Einstellungen werden auf verschiedenen Plattformen unterschiedlich gespeichert. Unter Windows werden sie beispielsweise in der Registry gespeichert, während sie unter macOS in XML-Dateien gespeichert werden.

QSettings können Sie Anwendungseinstellungen portabel speichern und wiederherstellen. Das Erstellen und Zerstören eines QSettings Objekts ist leicht und schnell. Bei der Erstellung eines Objekts von QSettings ist es sinnvoll, nicht nur den Namen der Anwendung, sondern auch den Namen Ihrer Organisation anzugeben. Zum Beispiel:

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

Resources

Das Qt Resource System 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 einen Satz von Dateien benötigt. Es schützt auch vor dem Verlust einer bestimmten Datei.

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

Standardmäßig ist der Zugriff auf Ressourcen vom Anwendungscode aus über denselben Dateinamen möglich, unter dem sie im Quellbaum gespeichert sind, mit einem :/ -Präfix oder über eine URL mit einem qrc-Schema.

Konnektivität

Datei-Archivierung

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

Qt bietet Unterstützung für Archive, die von zlib erzeugt werden (siehe qCompress() und qUncompress()).

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