Si tu as besoins de faire passer des chaîne de caractères dans un évènement, utilise la classe template QDeepCopy<QString>.
Exemple, un évènement qui envoie un texte vers un widget QTextEdit pour afficher du log:
Code :
 - enum MyEventType // définir un nouveau type d'evènement
 - {
 -   MyEventLog=QEvent::User
 - };
 - // définir un nouvelle classe d'évènement
 - class LogEvent: public QCustomEvent
 - {
 -   QDeepCopy<QString> s_; // une chaîne
 -   public: // construire l'évènement à partir d'un texte
 -   LogEvent(QString& string):
 -     QCustomEvent((QEvent::Type)MyEventLog),
 -     s_(string)
 -   { }
 -   QString string() // récupérer le texte // NOTE: pas de <<const>> sur la fonction
 -   { return s_; }
 - };
 
  | 
Dans la class Log:
Code :
 - protected: // redéfinir customEvent
 -   void customEvent(QCustomEvent* e)
 -   { // vérifier le type d'évènement
 -     if(e->type()==(QEvent::Type)MyEventLog)
 -     { // récupérer le texte
 -       QString s=((ExecuterLogEvent*)e)->string();
 -       protected_log(s); // la vraie fonction qui affiche le texte dans un QTextEdit
 -     }
 -   }
 -   public:
 -   void log(const QString& s) // la fonction qui fonctionne pour toutes les threads
 -   { // envoyer un évènement au gestionnaire
 -     QApplication::postEvent(this, new LogEvent(s));
 -   }
 
  | 
À utiliser de la manière suivante:
Code :
 - Log log=new Log();
 - log->log("Hello, world!" ); // ajoute du log quelquesoit la thread en cours
 
  | 
 
Message édité par nargy le 19-06-2006 à 16:04:26