2010-03-11 9 views
7

ile nasıl yanıt alacağınız QtWebKit ile yeni başlayan bir web sayfası (sunucu tarafı) yüklendiğinde ve bu sayfadan ne zaman veri gönderdiğimi sorduğumda, sunucudan yanıt dizisini yakalamak istiyorum C++ side bunu yapabilir miyim ?QtWebKit

+1

Daha fazla noktalama işareti ve daha az boşluk kullanarak başlayın. Okunabilirliği ve anlaşılırlığı geliştirir. –

cevap

1

Bunun için QNetworkReply sınıfını kullanabilirsiniz. QWebPage örnekleri, istekleri göndermek ve yanıtları almak için QNetworkAccessManager örneğini döndüren networkAccessManager() yöntemine sahiptir.

finished sinyalini aramanız gerekir.

void QNetworkAccessManager::finished (QNetworkReply * reply)

bir bekleyen ağ Cevap tamamlandı olduğunda sinyal yayılır

. yanıt parametresi, bitmiş olan cevaba bir işaretçi içerecektir. sırası geldiğinde

QNetworkReply nedenle yanıt verilerini almak için onun readAll() yöntemini çağırmak mümkün QIODevice bir mirasçısıdır.

this Sorunuzu faydalı bulabilirsin.

+0

Bu sadece bir işe yaramıyor .. – user63898

+1

Aynı şeyi yapmak istiyorum ve bu yöntem işe yaramıyor gibi görünüyor: bitmiş sinyal verilince, WebKit zaten tüm veriyi cevap nesnesinden okuyor. – Ghostrider

8

Qt (Ben yeniyim) ile tinkered ve WebKit tarafından indirilen tüm kaynakları yakalamak için bir yol buldum.

1), türetilmiş bir sınıf olarak QNetworkAccessManager

2) kendi alt sınıf oluşturun tepki nesneyi almak için sanal fonksiyon createRequest

3) Çağrı temel sınıf uygulaması geçersiz: İşte nasıl. Bundan sonra URL'yi (veya başka parametreler) bakıp yoksa)

4 o belirli kaynak yakalamanız gerekir belirlemek veya olamaz - veri bulacaktır bazı yuvaya readyRead sinyalini bağlamak

bu yuva arama gözetleme fonksiyonunda

5) WebKit QWebPage nesnesi oluşturduktan sonra veri

6 da

) alacak şekilde, veri okuma setNetworkAccessManager aramak ve aşama 1)

adresinin alt sınıfının bir yeni oluşturulan örneği geçmesine İşte bu - tadını çıkarın!

+0

Bu yaklaşımla ilgili güzel bir şey, İçerik Kodlaması ile ilgileniyor gibi görünüyor: gzip ve bu noktada deflate, böylece verileri kendiniz açmanız gerekmez – Ghostrider