[Gelöst]Fortschritt beim Parsen mit QXmlStreamReader

Alles rund um die Programmierung mit Qt
Antworten
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

[Gelöst]Fortschritt beim Parsen mit QXmlStreamReader

Beitrag von MichaelS »

Hallo,

ich parse XML-Dateien mit Hilfe von QXmlStreamReader. Das funktioniert soweit gut, ich würde dem Benutzer aber gerne den Fortschritt der Verarbeitung anzeigen. Allerdings fehlt mir da die zündende Idee, wie ich QXmlStreamReader die Informationen entlocken kann, wieviel Bytes der Datei schon verarbeitet wurden. Für Denkanstöße wäre ich dankbar.

Gruß Michael
Zuletzt geändert von MichaelS am 13. Januar 2016 14:40, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Fortschritt beim Parsen mit QXmlStreamReader

Beitrag von Christian81 »

Füttere den StreamReader doch häppchenweise.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Fortschritt beim Parsen mit QXmlStreamReader

Beitrag von RHBaum »

der XML reader verlangt nach QXmlInputSource als Dataenquelle ....
QXmlInputSource wiederum will nen QIODevice, um den es sich als Wrapper legt.
QIODevice ist eigentlich die Qt version eines rohen streames ... vergelichbar mit den Streambuffer klassen in der STL.

QIODevice ist der Dreh und Angelpunkt da ... Das nen generisches Interface für binäre Lese und schreibevorgänge mit ner rudimentären Feature Schnittstelle.

Die Inputsource wird die Daten immer nur blockweise nacheinander (sequentiell) vom QIODevice abrufen .... Du brauchst also in diese richtung nur nen read und nen End setzen

QFile als QIODevice hingegen bietet dir ne ganze menge mehr (Random Access) .... unter anderem die infos die zur berechnung des Fortschritts brauchst ... aslo die anzahl der gesammten bytes ....

Wenn du nun ne Klasse implementierst, die eine QIODevice Schnittstelle anbietet, nur im sequentiellen Modus, und sich Ihre daten aus nem QFile holt (Random Access) udn die nur durchreicht ... hasst du alle infos, und auch den einsprungspunkt (die read funktion) die du brauchst um nen Fortschritt an deine App zu emitten ...

Übrigens macht man das bei allen parsern auf ähnliche Weise ...
Also beim Xerces und bei tinyXML etc ... Die Klassen heissen nur immer anders ^^ manchmal sinds direkt stl klassen (i/o/streams) manchmal auch klassen direkt aus der Parser lib ...

Ciao ....
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Re: Fortschritt beim Parsen mit QXmlStreamReader

Beitrag von MichaelS »

Vielen Dank für die Tipps. Erste 'Schnelltests' mit einem QIODevice sehen ganz gut aus. Ich denke, damit komme ich zum Ziel.

Gruß Michael
Antworten