2010-11-17 3 views
0

Il semble que ce soit une solution pour ça dans qt3, mais je ne peux pas trouver un pour qt4 (tout ce que j'ai utilisé, goggling j'ai vu des solutions pour qt3).Comment puis-je surveiller QProcess fini() dans qt4 (Signal/Slot)

connect(r, SIGNAL(readyReadStandardError()), this, SLOT(updateError())); 
connect(r, SIGNAL(readyReadStandardOutput()), this, SLOT(updateText())); 
connect(r, SIGNAL(finished(int exitcode)), this, SLOT(updateExit())); 

J'ai mon stdout/stderr SIGNAL/SLOT de travail de très bien, mais je ne peux pas sembler trouver une bonne solution pour les finitions. Je ne peux rien faire dans une boucle ou proc-> waitforfinished parce que j'ai besoin de mise à jour constante à mon interface utilisateur. Comment puis-je faire ceci?

Mon erreur: Object :: connect: Aucun signal de QProcess :: fini (int exitcode)

Merci

Voici les signaux pour QProcess ....

Signals 
void error (QProcess::ProcessError error) 
void finished (int exitCode, QProcess::ExitStatus exitStatus) 
void readyReadStandardError() 
void readyReadStandardOutput() 
void started() 
void stateChanged (QProcess::ProcessState newState) 
+0

Votre environnement est-il correctement configuré pour QT4? terminé est définitivement un membre "signal" de QProcess. – JimR

Répondre

2

remplacer votre ligne de code

connect(r, SIGNAL(finished(int exitcode)), this, SLOT(updateExit())); 

avec

connect(r, SIGNAL(finished(int)), this, SLOT(updateExit())); 

Lorsque des signaux de connexion et les fentes ne donnent pas un nom de paramètre.

0

I se sentir comme je manque quelque chose ici, mais j'ai quelques minutes ... :)

Quel est le problème avec le signal fini en 4.x? Cela ajoute juste quelques paramètres à ce que vous avez de ce que je peux dire.

4.5:

void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus)

4,0:

void QProcess::finished(int exitCode)

Changer votre emplacement pour avoir les bons arguments et les ignorer si vous ne les avez pas besoin. En ce qui concerne les mises à jour d'état, lancez le nouveau QProcess dans un thread séparé et laissez ce thread faire l'attente.

+0

fait quelques modifications à mon code ... essayé ce que je pense était juste et a eu une erreur ... J'ai essayé quelques façons sans aucune chance – JohnStudio

+1

@John: qu'avez-vous essayé? le travail shoudl suivant: 'connect (r, SIGNAL (terminé (int, QProcess :: ExitStatus)), ceci, SLOT (updateExit (int, QProcess :: ExitStatus)));' avec 'void updateExit (int exitCode, QProcess: : ExitStatus exitStatus); ' –

+0

@John Studio - Code postal si vous voulez le résoudre rapidement. Plus il est facile pour nous de compiler le code, plus vite vous aurez une réponse. – JimR