Ausführen externer Programme

Verschiedenes zu Qt
Antworten
gRAseR
Beiträge: 2
Registriert: 11. April 2006 17:31

Ausführen externer Programme

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Schaue mal in die Doku zum Thema QProcess
JanGrieb
Beiträge: 3
Registriert: 10. März 2006 13:25
Wohnort: Buseck
Kontaktdaten:

Beitrag 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.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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 );
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag 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.
gRAseR
Beiträge: 2
Registriert: 11. April 2006 17:31

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

Beitrag 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.
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

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

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