Login
Newsletter
Werbung

Fr, 4. März 2005, 00:00

KDevelop

Bei der Verwendung von QApplication::connect greifen wir auf die internen Mechanismen zu, daher sind die Parameter wichtig, die wir im Falle dieser Methode angeben. Der erste ist das Objekt, das ein Signal generieren wird ­ unser Objekt task. Mit Hilfe des zweiten Parameters legen wir die Art des Signals fest. Beachten wir den Namen der Funktion: receivedStdout. Im Falle des Ausgangs stderr handelt es sich beim Definieren des Signals um folgende Funktion: receivedStderr In beiden Fällen nimmt die Funktion, die auf das Signal reagiert, dieselben Parameter an.

Im dritten Argument der Methode connect weisen wir auf ein Objekt hin, das das Signal empfangen wird ­ reader.

Im letzten Parameter sollen wir die Methode festlegen, die als Reaktion auf das Signal aus dem Objekt reader aufgerufen wird. In der Nomenklatur von Qt/KDE wird die Methode, die auf ein Signal antwortet, Slot genannt ­ daher verwenden wir im letzten Parameter das Makro SLOT.

Nachdem die beiden Signale angeschlossen worden sind, können wir das Programm wget starten, indem wir die Methode start aus dem Objekt task aufrufen. Um die zu stdout und stderr geschickten Daten abzufangen, müssen wir in der Methode start zusätzliche Parameter angeben: KProcess::Block und KProcess::AllOutput.

Der erste Wert bedeutet, dass unsere Applikation angehalten wird, solange der Befehl wget ausgeführt wird. Der zweite Wert bedeutet, dass wir alle Informationen abfangen werden, die an die Standardausgänge geschickt werden. Sollte das Verwalten des Standardeingangs notwendig sein, geben wir folgenden Wert an: KProcess::Stdin. Möchten wir hingegen alle drei Standardein- und Ausgänge kontrollieren, müssen wir in der Methode start die Konstante KProcess::All angeben.

Wie wir in Listing 2 sehen, ist das Aufrufen mit einer Bedingungsanweisung verknüpft. Falls die Methode die true zurückgibt, ist der externe Prozess erfolgreich abgeschlossen und die Datei heruntergeladen worden. Auf diese Art und Weise haben wir ein Programm erhalten, das eine unkompilierte Schnittstelle für den Befehl wget darstellt. Für die Implementierung ist noch die Klasse Reader übrig geblieben.

Listing 2. Implementierung der Methode DownloadBTN_Slot, die für das Herunterladen einer Datei zuständig ist.

void wgetGuiWidget::DownloadBTN_Slot() {
 KProcess *task;
 Reader reader;
 MessageBoxText->append(">>> process begin <<<");
 task=new KProcess;
 *task << "wget --progress=dot";
 *task << AddressText->text();
 task->setUseShell(true, "/bin/sh");
 reader.edt = MessageBoxText;
 QApplication::connect(task,
 SIGNAL(receivedStdout(KProcess *, char *, int)),
 &reader,
 SLOT(read_stdout(KProcess *, char *, int )));
 QApplication::connect(task,
 SIGNAL(receivedStderr(KProcess *, char *, int)),
 &reader,
 SLOT(read_stderr(KProcess *, char *, int)));
 if(task->start(KProcess::Block, KProcess::AllOutput))
 {
 MessageBoxText->append(">>> process end <<<");
 }
 else
 {
 MessageBoxText->append(">>> process failed <<<");
 }
}

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung