QProgressDialog an QProcess binden

Alles rund um die Programmierung mit Qt
Antworten
cbrider
Beiträge: 17
Registriert: 8. Juli 2005 00:45

QProgressDialog an QProcess binden

Beitrag 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.
Tarek
Beiträge: 46
Registriert: 3. Oktober 2005 14:29
Kontaktdaten:

Beitrag 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.
cbrider
Beiträge: 17
Registriert: 8. Juli 2005 00:45

Beitrag 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.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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 :-)
Tarek
Beiträge: 46
Registriert: 3. Oktober 2005 14:29
Kontaktdaten:

Beitrag 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...
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Beitrag 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]
Antworten