Seite 1 von 1
Ausführen externer Programme
Verfasst: 11. April 2006 17:39
von gRAseR
Hallo allerseits,
es ist wahrscheinlich eine skriptline und lachhaft einfach, aber ich habe leider bisher noch nichts explizit für Qt gefunden, was mir innerhalb eines GUI Programmes (via Menu) ein Programm ausführen soll. Sprich, ein Hauptprogramm führt ein Nebenprogramm aus. Muss das Hauptprogramm dann da eine extra Shell öffnen für? Oder geht das auch im Hintergrund? Ich hatte sowas wie "ShellExecute(...)" gedacht, aber das will er nicht compilieren...
Bin für jede Hilfe dankbar.
Verfasst: 11. April 2006 18:08
von BartSimpson
Schaue mal in die Doku zum Thema QProcess
Verfasst: 11. April 2006 18:10
von JanGrieb
Hi,
meintest du sowas wie:
Code: Alles auswählen
int QProcess::execute ( const QString & program, const QStringList & arguments ) [static]
(synchron, wartet bis programm terminiert)
oder:
Code: Alles auswählen
bool QProcess::startDetached ( const QString & program, const QStringList & arguments ) [static]
(asynchron, programm läuft im hintergrund)
Mit der Klasse QProcess kann man auch die Ausgabe des Programms über Pipes verarbeiten.
Einen direkten Ersatz für
ShellExecute(...) habe ich auch noch nicht gefunden. Bei dieser Funktion gibt man ja nur ein Dokument an, und es dieses wird dann im dazugehörigen Programm (entsprechend den Dateitypen-Zuordnungen in der Registry) geöffnet. Wenn da jemand eine Platform-übergreifende Lösung kennt, würde er auch mir helfen.
Verfasst: 11. April 2006 18:59
von FlorianBecker
Alleine unter X11 gibt es keine Registry, deswegen kann er eigentlich auch nicht sagen, wie mit welchen Programm was zu öffnen ist.
KDE hat eine eigene, Gnome hat eine eigene. Aber du kannst ja, z.B. die von KDE selber versenden.
Mit Windows gibt es allerdings eine Lösung:
Code: Alles auswählen
QString app;
QStringList s;
app = "rundll32.exe";
s << "url.dll,FileProtocolHandler" << url;
QProcess::startDetached( app, s );
Verfasst: 12. April 2006 16:36
von Nassian
Ich habe das so gelöst indem ich in erster Linie checke Windows oder was anderes.
Wenn etwas anderes dann überprüfe ich in der Environment Variable PATH ob in den angegebenen Ordnern konqueror, firefox oder safari enthalten ist (in der Reihenfolge, ist aber im Prinzip irrelevant; in meinem Fall, Religion

). Und das erste, dass vorhanden ist, starte ich.
Verfasst: 12. April 2006 17:36
von gRAseR
Danke fürs schnellen Antworten.
QProcess hat schon ganz gut geholfen. Hätte ich eigentlich auch selbst drüber stolpern müssen...
Die Ausgabe habe ich vorerst auskommentiert... vielleicht schicke ich die einfach an eine "Protokolldatei", oder die Shell aus der ich das Programm starte

Verfasst: 13. April 2006 07:30
von macman
Nassian hat geschrieben:Wenn etwas anderes dann überprüfe ich in der Environment Variable PATH ob in den angegebenen Ordnern konqueror, firefox oder safari enthalten ist (in der Reihenfolge, ist aber im Prinzip irrelevant; in meinem Fall, Religion

). Und das erste, dass vorhanden ist, starte ich.
Unschön. Woher willst Du wissen welches Programm mein Standardbrowser ist? Gibt es unter Linux kein 'open document'? Zumindest bei Win und Mac funktioniert es so.
Verfasst: 13. April 2006 09:33
von Nassian
Was ist "open document"?
Klar, ich könnte einmal die KDE Config durchgehen, dann die GTK und schlussendlich eine eventuell vorhandene Mac Config, allerdings sprengt das so ziemlich jede Kosten/Nutzen Rechnung. Deshalb: Gar nicht erst externe Programme einbinden oder, wenn nicht anders möglich -> mitliefern.
SG Alexander
Verfasst: 13. April 2006 09:57
von macman
Open wäre der Befehl und document der Parameter, das System erledigt dann den Rest. Das wird schon wissen mit welchem Programm der User ein PDF, Bild oder einen Link geöffnet haben will. Angenommen Du willst dem Kunden die Möglichkeit bieten, dir einfach eine Mail zu schicken. Dann wäre es doch schön dem System einfach ein 'mailto:
myname@myaddress.de' zu übergeben und um den Rest brauch man sich nicht zu kümmern.
Bei Windows geht das mit ShellExecute, bei MacOS müßte es mit open gehen, will ich jetzt nicht beschwören, da ich hier keinen Mac habe. Plattformunabhängig fällt mir da nichts zu ein.