QObject (QPlainTextEdit) & Multithreading questions

Im en train d'essayer d'apprendre de Réseautage avec Python asyncore et pyqt4.

J'ai codé un petit serveur, qui, fondamentalement, est à l'écoute sur un port, et renvoie tous les messages qu'il reçoit à l'expéditeur.

Depuis deux qts QApplication.exec_() et asyncore.loop() sont des fonctions qui ne retournent jamais je ne pourrais pas commencer dans un thread, donc je l'ai regardé asyncore.loop() dans un autre fil de démon.

Chaque fois que mon serveur de classe (dérivé de asyncore.dispatcher) établit ou des gouttes d'une connexion, ou envoie/reçoit un message, il appelle les méthodes de ma classe de fenêtre (dérivé de QtGui.QMainWindow), qui affiche les informations dans un QPlainTextEdit.

Mais le texte n'est pas visible, sauf si vous définissez le texte avec la souris.

Python console affiche le msg d'erreur suivant:

QObject::connect: Cannot queue arguments of type 'QTextBlock'
(Make sure 'QTextBlock' is registered using qRegisterMetaType().)
QObject::connect: Cannot queue arguments of type 'QTextCursor'
(Make sure 'QTextCursor' is registered using qRegisterMetaType().)

J'ai lu sur certains forum, que ce soit causé par l'appel de qt-fonctions à partir d'un autre Thread, et que l'utilisation de signaux & fentes au lieu de la plaine d'appel de fonction peut résoudre le problème, mais j'ai essayé de signaux aswell, et j'obtiens toujours cette erreur.

Donc, (si c'est vraiment la cause de mes problèmes) quel est la bonne manière d'appeler les méthodes d'un objet de qt à partir d'un autre thread ?

EDIT pour Plus d'Info:
le asyncore.loop() qui est situé dans l'enfant du fil, et bien ce n'est pas vraiment de blocage, mais seulement lors de l'exécution de asyncore.loop() mon Serveur de classe (asyncore.répartiteur) peut faire du réseautage.
Ainsi, lors de l'exécution de asyncore.loop() les méthodes de ma classe de Serveur SONT appelés par asyncore.loop() (=enfant thread), et dans ces je
essayé d'émettre les signaux de la classe de fenêtre exécute dans le thread principal

EDIT: Semble que je l'ai eu à travailler maintenant, j'ai eu des erreurs dans mon code, tout fonctionne comme prévu avec des signaux de maintenant.

EDIT: petit exemple: http://paste2.org/p/635612 (lien mort)

Vous pouvez poster une explication ou un bout de la solution de travail? Il serait certainement aider les autres avec le même problème à l'avenir. =)

OriginalL'auteur smerlin | 2010-01-20