Ausführen externer Programme
Ausführen externer Programme
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.
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.
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
Hi,
meintest du sowas wie: (synchron, wartet bis programm terminiert)
oder: (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.
meintest du sowas wie:
Code: Alles auswählen
int QProcess::execute ( const QString & program, const QStringList & arguments ) [static]oder:
Code: Alles auswählen
bool QProcess::startDetached ( const QString & program, const QStringList & arguments ) [static]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.
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
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:
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 );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.
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
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.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.
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
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
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.
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.