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