Seite 1 von 1

QProgressDialog an QProcess binden

Verfasst: 23. Januar 2007 09:53
von cbrider
Hallo an alle. Ich hab' hier mal wieder eine kleines Prob. Hab' hierzu auch noch nix passendes im Forum gefunden.

Ich rufe über QProcess eine externe Anwendung auf welche ein paar Dateikonvertierungen durchführt. Die Lauftzeit dieser Konvertierung ist stark schwankend (bis zu 30 Sek.). Nun möchte ich an diesen QProcess ein QProgressDialog binden.

Wie geht das am sinnvollsten? Leider bekomme ich keine steps aus der externen Anwendung zurück an welchen ich den Fortschritt der Konvertierung festmachen kann.

Jemand eine Idee ?

THX for help.

Verfasst: 23. Januar 2007 10:52
von Tarek
Also wenn du keinerlei Rückmeldung von der Anwendung bekommst kannst du logischer Weise auch keinen Fortschritt anzeigen (es sei denn mit Qt 4.3 wird eine QOracle Klasse eingeführt :wink: )

Ich würde da an deiner Stelle einfach eine Endlosanimation anzeigen, das wird von vielen Programmen so gehandhabt.

Verfasst: 23. Januar 2007 11:33
von cbrider
Sowas in der Richtung habe ich auch schon erwogen.

Aber eigentlich habe ich auf so eine Windoze Lösung gehofft. Da stimmen die Zeiten beim Kopieren und/oder Runterladen ja auch nur bedingt bis gar nicht mit der Realität überein. Aber der User hat was über das er sich aufregen kann. :wink:

Als "Bretterbudenlösung" hab ich zwei QMessageboxen genommen. Eine am Anfang und eine am Ende der externe App. Sieht belämmert aus, aber geht noch.

Die Endlosanimation ist sicher hübsch aber Zeitaufwändig.

Trozdem würde mich mal eine elegante Lösung interessieren, wie man einen QProcess mit einem QProgressDialog verbindet (unter der Annahme das die externe Anwendung ein paar steps rausgibt).

Wäre doch auch mal interessant sich Entwicklungsrichtlinien zu überlegen, damit externe Applikationen einen Fortschritt an andere Programme melden. So eine Art permanetes emittieren eines Signals.

Verfasst: 23. Januar 2007 11:56
von macman
cbrider hat geschrieben:Aber eigentlich habe ich auf so eine Windoze Lösung gehofft. Da stimmen die Zeiten beim Kopieren und/oder Runterladen ja auch nur bedingt bis gar nicht mit der Realität überein. Aber der User hat was über das er sich aufregen kann. :wink:
Da sind die zu übertragenden Daten auch bekannt. Kopieren ist aber kein gleichmäßiger Prozess, deshalb die Zeitdifferenzen.
cbrider hat geschrieben:Die Endlosanimation ist sicher hübsch aber Zeitaufwändig.
Nimm eine Progressbar und steuer sie über einen Timer. Nach maximal einer Minute sollte das externe Programm fertig sein oder es hängt irgendwo. So könntest Du sicherstellen, das dein Programm nicht auch stehen bleibt, nur weil ein externes Programm Probleme hat.
cbrider hat geschrieben:Trozdem würde mich mal eine elegante Lösung interessieren, wie man einen QProcess mit einem QProgressDialog verbindet (unter der Annahme das die externe Anwendung ein paar steps rausgibt).
Elegant ginge nur bei Prozessen, bei den der Ablauf fest definiert ist. Sobald die Anzahl der Schritte aus irgendwelchen Gründen dynamisch ist, bekommst Du ein Problem, bzw. der User hat etwas worüber er sich aufregen kann :-)

Verfasst: 23. Januar 2007 16:43
von Tarek
Die Endlosanimation ist sicher hübsch aber Zeitaufwändig.
Ich hab vor einiger Zeit mal ein Widget das so eine Animation anzeigt geschrieben, sieht so aus:
Bild
Vor ein Textlabel gesetzt finde ich ist es gar nicht verkehrt,
wenn du den Quelltext haben willst sag bescheid...

Verfasst: 23. Januar 2007 17:17
von gerome69
cbrider hat geschrieben:
Die Endlosanimation ist sicher hübsch aber Zeitaufwändig.
Nein, es geht einfach durch Setzen von Minimum und Maximum auf 0:

Code: Alles auswählen

progressDialog=new QProgressDialog ("TITEL","Abbrechen",
0,0,this,
Qt::MSWindowsFixedSizeDialogHint|Qt::WindowTitleHint);

progressDialog->setAutoClose(TRUE);
progressDialog->show();
B.[/code]