Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : QT - Problem mit QProcess



alexbaer
14-11-2004, 13:24
Hi,

ich habe ein Problem mit QProcess.

Ich erstelle eine Prozess und gebe die Argumente ein. Nun bekomme ich das SIGNAL (readyReadStdout). Ich kann die Daten auch auslesen.

Der Befehl steht in einer Eingabeschleife und wartet eine weitere Eingabe, wenn ich nun die Daten auslese und mit der Eingabe von 0 fortfahren möchte (writeToStdin(0)), bekomme ich kein SIGNAL wroteToStdin zurück.

Mache ich beim writeToStdin die Eingabe falsch??

Code:

connect( process, SIGNAL(readReadStdout()), this, SLOT(writeToStdin( 0 )));
connect( process, SIGNAL(wroteToStdin()), this, SLOT(datenauslesen());

0 steht für den Text den ich Eingeben möchte.

Danke schonmal

Gruß
alexbaer

peschmae
14-11-2004, 13:43
connect( process, SIGNAL(readReadStdout()), this, SLOT(writeToStdin( 0 )));

das geht so nicht, auch wenn man das manchmal gerne machen möchte. Da musst du irgend einen anderen Weg finden.

connects gehen nur in der Art:

connect( process, SIGNAL(readReadStdout()), this, SLOT(writeToStdin()));
oder auch mit Argumenten:

connect( process, SIGNAL(readReadStdout(QString)), this, SLOT(writeToStdin(QString)));
aber hier stehen die QStrings beide nicht für einen konkreten QString sondern dafür, dass das Signal jeweils einen QString als Argument mitkriegt und der Slot auch.

Siehe auch: http://doc.trolltech.com/3.3/signalsandslots.html

MfG Peschmä

anda_skoa
14-11-2004, 14:22
Du brauchst ansich nur einen Slot, den du mit readReadStdout verbindest.

Dort liest du die Daten aus und schreibst gleich den neuen Input Richtung Prozess.

Ciao,
_

alexbaer
16-11-2004, 20:25
hi,

ich bekome das SIGNAL readyReadStdout und kann dieses auch auslesen. Nur ist es so, dass er Prozess noch eine weitere Eingabe erwartet und ich diese mit "...->addArgument("0");" eingeben will, allerdings wird diese Eingabe anscheinend vom Prozess nicht angenommen (das SIGNAL wroteToStdin bekomme ich), da sich die Ausgabe nicht verändert.

anda_skoa
16-11-2004, 20:32
addArgument ist für die Parameter des Kommandoaufrufs, logischerweise bewirkt ein addArgument nach dem Start nichts mehr.

Ich nehme an das Programm erwartet Eingabedaten auf seinem Standard Input Stream stdin, dorthin kann man mit QProcess::writeToStdin schreiben.

Ciao,
_