2010-03-11 4 views
7

Ich bin Anfänger mit QtWebKit Ich baue einfache Web-Frame, die Seite geladen (Server-Seite) und wenn ich von dieser Seite Daten absende Ich mag die Antwort-String vom Server in der C++ Seite wie kann ich das machen ?Wie bekomme ich Antwort in QtWebKit

+1

Beginnen Sie mit mehr Interpunktionszeichen und weniger Leerzeichen. Würde die Lesbarkeit und Verständlichkeit verbessern. –

Antwort

1

Sie können QNetworkReply Klasse dafür verwenden. QWebPage Instanzen haben networkAccessManager() Methode, die eine QNetworkAccessManager Instanz zurückgibt, die Anfragen senden und Antworten empfangen kann.

Sie müssen nach seinem finished Signal suchen.

void QNetworkAccessManager::finished (QNetworkReply * reply)

Dieses Signal ausgesendet wird, wenn ein anhängige Netzwerk Antwort fertig ist. Der Antwortparameter enthält einen Zeiger auf die Antwort, die gerade beendet wurde.

QNetworkReply seinerseits ist ein Erbe von QIODevice daher Sie in der Lage sind ihre readAll() Methode aufrufen, um die Antwortdaten zu empfangen.

Sie können auch this Frage nützlich finden.

+0

das ist einfach nicht funktionieren .. – user63898

+1

Ich möchte genau das gleiche tun und diese Methode scheint nicht zu funktionieren: Wenn das Signal beendet ist, liest WebKit bereits alle Daten aus dem Antwortobjekt, so dass es einfach nicht da ist. – Ghostrider

8

Ich habe mit Qt herumgebastelt (was ich neu bin) und einen Weg gefunden, alle von WebKit heruntergeladenen Ressourcen abzufangen. Hier ist, wie:

1) Erstellen Sie Ihre eigene Unterklasse von QNetworkAccessManager

2) In der abgeleiteten Klasse überschreiben virtuelle Funktion erzeugeAnf

3) Call-Basisklassenimplementierung, um die Response-Objekt zu erhalten. Danach können Sie bei suchen die URL (oder andere Parameter) und bestimmen, ob Sie diese bestimmte Ressource oder nicht

4) erfassen müssen, wenn Sie - readyread Signal zu einem gewissen Slot verbinden, der die Daten

erfassen wird

5) in dieser Anruf Peek Funktion Schlitzdaten zu lesen, so dass WebKit auch die Daten

6) nach dem Erstellen QWebPage Objekts erhalten wird, rufen setNetworkAccessManager und eine neu erstellte Instanz der Unterklasse aus Schritt 1) ​​

passieren Das war's - viel Spaß!

+0

Das Schöne an diesem Ansatz ist, dass er sich um Content-Encoding kümmert: gzip und deflate an diesem Punkt, sodass Sie die Daten nicht selbst dekomprimieren müssen – Ghostrider