Seite 1 von 2
Problem mit QFtp bei dataTransferProgress mit Progressbar
Verfasst: 13. Oktober 2009 16:56
von felixwiewel
Hi,
ich hab folgendes Problem:
wenn ich mit QFtp::get() Etwas downloade lädt er erst die Datei herunter und fragt dann nach einem Speicherort. Das ist auch so gewollt doch obwohl ich das Signal von QFtp::dataTransferProgress abfange und beide Variablen verwende bekomme ich als gesamtBytes immer -1 zurück. Die Datei befindet sich allerdings in einwandfreiem Zustand auf meiner Platte.
Ich möchte mit dieser Funktion den Progressbar ansteuern:
Code: Alles auswählen
void MainWindow::progress(qint64 doneBytes, qint64 totalBytes)
{
if (totalBytes != -1)
{
ui->progressBar->setMaximum(100);
ui->progressBar->setValue(doneBytes/totalBytes*100); //Verhältnis der Bytes zueinander *100 = % der gesamten Bytes
}
else
{
ui->progressBar->setRange(0,0);
}
}
Die Funktion verbinde ich so mit dem Signal:
Code: Alles auswählen
connect(ftp,SIGNAL(dataTransferProgress(qint64 ,qint64 )),this,SLOT(progress(qint64 ,qint64 )));
Hoffe mir kann Jemand weiter helfen!
Vielen Dank im Vorraus.
Verfasst: 13. Oktober 2009 17:14
von Christian81
Was meinst Du mit 'gesamtBytes' - totalBytes ?
Verfasst: 13. Oktober 2009 17:21
von felixwiewel
Ja die werden von dem Signal übergeben:
Code: Alles auswählen
void QFtp::dataTransferProgress ( qint64 done, qint64 total ) [signal]
Verfasst: 13. Oktober 2009 17:25
von Christian81
Vielleicht unterstützt der ftp-Server das nicht.
Verfasst: 13. Oktober 2009 17:29
von felixwiewel
Doch gFtp (ein FTP-Client) zeigt mir den Fortschritt an. Es liegt also nicht am Server.
Verfasst: 13. Oktober 2009 17:32
von Christian81
Steht wirklich -1 drin oder:
Qt-Doku hat geschrieben:
done is the amount of data that has already been transferred and total is the total amount of data to be read or written. It is possible that the QFtp class is not able to determine the total amount of data that should be transferred, in which case total is 0.

f you connect this signal to a QProgressBar, the progress bar shows a busy indicator if the total is 0).
Warning: done and total are not necessarily the size in bytes, since for large files these values might need to be "scaled" to avoid overflow.
Verfasst: 13. Oktober 2009 17:35
von felixwiewel
Ja da ich ja darauf Prüfe ob -1 drin steht. Das mache ich mit dem If in Zeile 3.
Code: Alles auswählen
void MainWindow::progress(qint64 doneBytes, qint64 totalBytes)
{
if (totalBytes != -1)
{
ui->progressBar->setMaximum(100);
ui->progressBar->setValue(doneBytes/totalBytes*102400);
}
else
{
ui->progressBar->setRange(0,0);
}
}
Es wird immer der Befehl nach dem Else ausgeführt. Skaliert wird es ja auch.
Verfasst: 13. Oktober 2009 17:37
von Christian81
Wenn Du die aktuellste Qt-Version benutzt ist es dann ggf. ein Fehler -> Bugreport an Nokia schreiben.
Verfasst: 13. Oktober 2009 17:43
von felixwiewel
Ein Bug ist es auch nicht da dieses Signal nichts neues ist es ist schon seit Qt 4.0 dabei und in anderen Programmen wird es auch verwendet.
http://board.gulli.com/thread/1264589-q ... attformen/
Hier wird genau die gleiche Funktion benutzt allerdings wird nichts von diesem Fehler gesagt. Auch bei der Uni Köln wird die funktion verwendet.
http://old.hki.uni-koeln.de/teach/ws060 ... tp.cpp.txt
Es muss was mit meinem Code zu tun haben.
Verfasst: 13. Oktober 2009 17:47
von Christian81
Du bist lustig

Nur weil es schon ewig dabei ist heißt es nicht dass sich nicht doch ein Fehler eingeschlichen hat. Und wenn Du -1 bekommst - was willst du mehr machen??
Es gibt ein ftp-Example zusammen mit dem Qt-Sourcecode. Das kannst du ja auch mal ausprobieren...
Verfasst: 13. Oktober 2009 17:51
von felixwiewel
Das Beispiel hab ich mir schon durchgelesen allerdings wird da dieses Signal auch so verwendet. Und ich glaube das die es nicht mit aufgenommen hätten wenn es nicht funktionieren würde.
EDIT: Ich habe mal den kompletten Code hochgeladen vllt hilft das:
http://rapidshare.com/files/292511382/code.zip.html
Verfasst: 13. Oktober 2009 17:54
von Christian81
Dann probiere mit dem Beispiel mal von dem FTP-Server runterzuladen wo Du -1 zurückbekommst - ist das so schwer?
Verfasst: 13. Oktober 2009 17:58
von felixwiewel
Das Problem ist das ich das nicht für Linux complimiert gefunden habe sondern nur den Quellcode und den kann ich nicht ausführen da mir Resourcen fehlen.
Verfasst: 13. Oktober 2009 18:00
von Christian81
Gute Ausrede - als ob 3 pngs wirklich stören wenn sie nicht da sind
Na mach was Du willst...

Verfasst: 13. Oktober 2009 18:02
von felixwiewel
Tut mir Leid wenn ich dich verärgert habe aber ich habs einfach nicht ans laufen bekommen.