Login
Newsletter
Werbung

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

KDevelop

Herunterladen der Datei

Unsere eigentliche Aufgabe besteht im Programmieren des zweiten Buttons. Wir werden auf andere Komponenten zugreifen. Es ist daher notwendig, die entsprechenden Headerdateien hinzuzufügen. Da wir die Felder des Typs QLineEdit und QtextEdit verwenden, fügen wir folgende Headerdateien hinzu:

#include <qlineedit.h>
#include <qtextedit.h>

Wie schon oben gesagt, verwenden wir auch die Klasse KProcess ­ wir benötigen also die Headerdatei kprocess.h. Nachdem wir die beschriebenen Tätigkeiten durchgeführt haben, können wir uns mit der Anwendung der Funktion DownloadBTN_Slot beschäftigen. In Listing 2 befindet sich der gesamte Quellcode dieser Funktion. Zunächst sollten wir zwei Variablen definieren. Die erste Variable (task) steht für einen externen Prozess, den wir erstellen müssen, um den Befehl wget auszuführen. Die zweite Variable (reader) ist ebenfalls von großer Bedeutung. Es handelt sich hier um die von uns definierte Klasse, die benötigt wird, damit wir die Daten von dem Standardausgang abfangen können. In der nächsten Zeile platzieren wir eine Meldung, die darauf hinweist, dass das Aufrufen von wget gerade beginnt. Nun können wir uns mit der eigentlichen Aufgabe beschäftigen. Wir erstellen das Objekt task:

task=new KProcess;

Anschließend können wir festlegen, wie das Aufrufen des Befehls wget aussehen soll. Wir nehmen an, der Befehl wird wie folgt aufgerufen:

wget --progress=dot http://www.adresse.de/verzeichnis/datei.zip

Zu den größten Vorteilen der Klasse KProcess gehört die Tatsache, dass ein Befehl mit Hilfe des Operators &lt;&lt; erstellt werden kann. Der erste Teil muss selbstverständlich den Namen des Befehls enthalten. Der Code, mit dessen Hilfe der Befehl erstellt wird, sieht wie folgt aus:

*task << "wget -­progress=dot";
*task << AddressText->text();

Die Adresse der Datei wird aus dem Widget AddressText abgelesen. Es lohnt sich noch festzulegen, welcher Typ der Oberfläche beim Aufrufen des Befehls wget verwendet werden soll. Dies wird mit Hilfe der Methode setUseShell erfolgen. Der Code, der für diese Aufgabe zuständig ist, sieht wie folgt aus:

task->setUseShell(true, "/bin/sh");

In diesem Moment könnten wir zwar unseren Prozess mit Hilfe der Methode start starten, jedoch finden alle Meldungen des Programms wget in der Konsole statt, in der das Programm gestartet wurde. Falls wir uns in einer graphischen Umgebung befinden, werden wir keine Meldungen sehen können. Aus diesem Grund müssen wir alle Daten abfangen, die an stdout und stderr geschickt werden. Zu diesem Zweck verwenden wir das Objekt reader. Damit alles richtig funktionieren kann, sollte in das Feld edt ein Verweis auf die Komponente QRextEdit namens MessageBoxText gesetzt werden:

reader.edt = MessageBoxText;

Als nächste Aufgabe sollten wir das Signal anschließen, das für den Empfang der Daten, die an die Standardausgänge durch die Objekte des Typs KProcess geleitet werden, verwendet wird. Wir benutzen dabei die Methode connect der Klasse QApplication. Der Code aus dem Listing 2 fängt unter Zuhilfenahme des Objekts reader die Daten an den Standardausgängen ab.

Das Anschließen des Signals sieht im ersten Fall wie folgt aus:

QApplication::connect(task, SIGNAL(receivedStdout(KProcess *, char *, int)),
 &reader,
 SLOT(read_stdout(KProcess *, char *, int)));

Der Befehl für den Standardausgang stderr ist sehr ähnlich.

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