1

Par chance si qqn a deja rencontre ce probleme...
J'utilise Qt/WebKit afin de faire un petit browser assez specifique, et j'aimerais avoir un controle complet sur les requetes qui sont effectuees a chaque fois par le QWebView/QWebpage et aussi pouvoir les logguer.

Vu qu'il n'y a pas moyen d'acceder directement a la requete via une QWebPage, j'ai essaye en surchargeant un QNetworkAccessManager et en l'affectant a ma QWebPage, mais rien ne se passe... Donc si qqn aurait une idee...

Voici le code qui aurait ete cense faire ce que je voulais, qui est basiquement d'intercepter les requetes get/post faites via QNetworkAccessManager par WebKit, mais apparement c'est foireux et/ou ca marche pas comme ca.
[nosmile]
class NetworkAccessManager(QNetworkAccessManager):
	__unique = None
	def __init__(self, parent = None):
		if NetworkAccessManager.__unique:
			raise NetworkAccessManager.__unique
		NetworkAccessManager.__unique = self
		QNetworkAccessManager.__init__(self, parent)
	def get(self, request):
		print "NetworkManager::get"
		return QNetworkAccessManager.get(self, request)
	def post(self, request, data):
		print "NetworkManager::post"
		return QNetworkAccessManager.post(self, request, data)

class MainWindow(QMainWindow):
	def __init__(self, parent=None):
		QMainWindow.__init__(self, parent)
		
		self.manager = NetworkAccessManager()
		self.webpage = QWebPage()
		self.webpage.setNetworkAccessManager(self.manager)
		self.web     = QWebView()
		self.web.setPage(self.webpage)
		
		self.web.load(QUrl("http://asdf.com"))
		
		self.setCentralWidget(self.web)

2

Je pense que tu peux faire un !call godzil, ça doit être le seul à s'en servir ^^
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

3

Tu as quoi comme problème?
Ca n'affiche pas l'output, ca l'affiche mais ca joue pas la request?
Sinon tu as essayé en enlevant ton constructeur dans un premier temps?

4

donc l'idee, c'est que ca affiche "NetworkManager::get" quand je fais une requete GET par exemple...
et la, ca affiche rien du tout sur la console, la browser n'a pa de probleme et tout marche bien pt de vue GUI
ca va me servir a quoi de retirer le constructeur? il faut bien que je cree le composant Qt...

5

C'est pas un singleton dans NetworkAccessManager?
D'ailleurs le constructeur de la classe mère est pas appelé automatiquement?

6

ouep, c'est un singleton dans NetworkAccessManager et nop, en python faut appeler explicitement le constucteur de la classe mere..

7

ok okwink

C'est peut être le wrapper C/C++ Python qui n'est pas bien fait non? parce que la je ne vois pas pourquoi cela ne marcherait pas :/

8

j'ai commence a en faire une version C++, je verrais si ca marche ou pas.
mais si ca se trouve, c'est complement un problem de comprehension de la classe QNetworkAccessManager de ma part hein... mais pour moi, je peux hijacker les get/post/head labas

9

Tu ne peux pas, ces fonctions ne sont pas virtuelles, donc ta surcharge ne sera pas prise en compte! C'est QNetworkAccessManager::createRequest (la méthode virtuelle protégée) qu'il faut surcharger. (Qt essaie souvent de séparer interface (publique, non-virtuelle) et implémentation (virtuelle, protégée), ceci est un exemple de cette stratégie.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

10

arf, absolument! Merci bcp