QWebElement

Alles rund um die Programmierung mit Qt
Antworten
Nukleus
Beiträge: 44
Registriert: 16. April 2010 13:32

QWebElement

Beitrag von Nukleus »

Hallo,

ich schreibe zur Zeit eine Applikation, mit der ich meine Laufaktivitäten verwalten will.
Dabei lese ich meine Laufuhr aus und will aus den gelesenen Daten Laufzeit, Distanz,... berechnen.

Die Uhr liefert die Daten im HTML-Format.

Dabei gibt es für einen einzigen Lauf eine ganze Reihe von GPX-Trackpunkten. Wenn ich 1h Laufe, dann sind es ca. 3500 Trackpunkte.

Ich habe die ganze GPX-Datei gelesen und in einen einzigen QString geschrieben. Diesen habe ich über die Befehle

Code: Alles auswählen

  
  webPage.mainFrame()->setContent( QVariant(gpx).toByteArray());	/* Lade den HTML-Content 			*/
  collection = webPage.mainFrame()->documentElement().findAll("trkpt");	/* Hole alle Track Daten		*/
in den Main-Frame einer Web-Page geladen. gpx ist eine QString, der die geladenen Daten enthält (ist kontrolliert und korrekt) und collection ist vom Typ QWebElementCollection.

Nach dem Aufruf enthält collection nur 2048 Elemente. Das ist 2**11. In diesem Fall müßten es aber 3503 sein. Gibt es eine Größenbeschränkung für QWebElementCollection? Wenn ja: kann man diese Größenbeschränkung umgehen?

Für Hinweise wäre ich sehr dankbar.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QWebElement

Beitrag von Christian81 »

Wenn Webkit intern es nicht irgendwo eine Beschränkung gibt - in der Qt-Schicht ist da nichts. Abgesehen davon:
- QtWebkit gibt es nicht mehr ab Qt 5.6
- Die Wandlung des QString in ein QByteArray is sehr sehr abenteuerlich... - entweder korrekt kodieren (ich denke hier .utf8()) oder direkt setHtml() benutzen
- Wenn Du die Daten eh schon aus einer Datei liest sollte ein kleiner Parser auch gehen ohne das riesige QWebKit zu benutzen
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Nukleus
Beiträge: 44
Registriert: 16. April 2010 13:32

Re: QWebElement

Beitrag von Nukleus »

zunächst einmal vielen Dank für die Antwort.

Es mag ja sein, daß Qt 5.6 jetzt andere Möglichkeiten hat für die Webzugriffe. Ich benutze aber Qt 5.4 und mein System (openSuse 13.2) kommt nun mal damit.
Den Versuch, eine höhere Qt-Version drüber zu installieren, habe ich irgendwann mal abgebrochen. Ich hatte Sorge, daß ich ggf. alle Pakete abschieße, die darauf beruhen. Auch schon das Übersetzen einer höheren Version scheiterte irgendwann an einem späten (Übersetzungs)-Zeitpunkt. Irgendwann war mir die Zeit einfach zu schade.
Es mag auch sein, daß die Wandlung von QString nach QByteArray abenteuerlich ist, aber QFrame.setContent verlangt nun mal ein QByteArray als Input und ich habe einen QString als Material vorliegen. Im übrigen sah das gewandelte ByteArray total ok aus.
Ich habe es schließlich so gelöst, daß ich mit der Anweisung QString.split meinen große gpx-QString in kleinere Schnipsel in eine QStringList zerlege und dann mit meinem Mechanismus QWebPage / QWebFrame zum weiteren Parsen auf jedes einzelne Schnipsel loslasse. Das funkioniert jetzt einwandfrei, allerdings immer noch mit der Wandlung QString nach QByteArray (für jedes einzelne Schnipsel).

Aber noch mal vielen Dank. Wenn ich irgendwann auf openSuSE 42.2 umstelle und da dann hoffentlich QT5.8 vorfinde, werde ich es noch einmal probieren.
Antworten