Externes Programm in Widget einbetten

Alles rund um die Programmierung mit Qt
Antworten
shaka
Beiträge: 27
Registriert: 8. November 2006 10:36
Wohnort: München

Externes Programm in Widget einbetten

Beitrag von shaka »

Hallo!

Ich stehe vor der Aufgabe, eine Qt-Applikation zu schreiben, die in einem TabWidget externe Programme einbettet, d.h. ein Tab soll z.B. einen ImageViewer zeigen, das nächste ein Control-Panel etc. Ich kann laut Vorgabe bei diesen Programmen nicht auf Qt-Klassen zurückgreifen, es sind ausdrücklich unabhängige Prozesse...
Nun ist es kein Problem, externe Programme über QProcess zu starten, ich denke unter Linux könnte ich sie mit dem "-geometry " - Parameter auch noch an die Position des Widgets manöverieren, aber wenn ich daran denke, daß ich bei Größenänderung meines Widgets auch die externen Programme anpassen muß, daß ich mich um Tastaturfoki kümmern muß, und daß das Ganze schließlich sowohl unter Linux als auch unter Windows laufen soll, habe ich doch ein schlechtes Gefühl...
Hat jemand einen Tipp für mich, wie man das Thema angehen könnte?

Danke!
Shaka
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Eine andere Möglichkeit, als über die jeweilige API des Betriebssystems zu gehen sehe ich momentan nicht.

Was willst du denn da genau eigentlich machen? Gibt es zu den Programmen selbst vielleicht einen SDK? Dann mach das als native Anwendung.

Würdest du uns einen genaueren Einblick in dein Vorhaben geben?
Deever
Beiträge: 90
Registriert: 9. Mai 2007 18:20

Beitrag von Deever »

IMHO unmöglich, sofern die einzubettende Software keine entsprechende Schnittstelle anbietet, wie z.B. ActiveX unter Windous oder KPart unter KDE.

Gruß,
/dev
shaka
Beiträge: 27
Registriert: 8. November 2006 10:36
Wohnort: München

Das Vorhaben

Beitrag von shaka »

Zunächst einmal sollte ich klarstellen, daß das Ganze nicht mein Vorhaben ist, sondern das meiner glorreichen Vorgesetzten... Ich bin davon alles andere als begeistert, bzw. habe ernste Zweifel, ob das alles überhaupt durchführbar ist....
Die Idee ist folgende: Es geht um eine Maschinensteuerung, in der verschiedene Viewer für alle möglichen Dinge vorhanden sind, die sich alle in der Art

viewer -file fileToView

starten lassen und dann die Files in ganz unterschiedlicher Weise anzeigen.
Die Viewer sind im Augenblick einfache, unabhängige Dialog-Programme (d.h. mit eigenen GUIs), die uns meist nicht mal als Sourcecode zur Verfügung stehen.
Die Idee war nun, in Qt eine Anwendung zu schreiben, die im wesentlichen ein TabWidet zur Verfügung stellt, einen Viewer (als eigenen Prozeß) startet und so verkleinert und positioniert, daß er genau in dem Tab liegt. Wird der Tab umgeschaltet, soll der Viewer geschlossen oder minimiert werden und der entsprechende Viewer für den nächsten Tab an seine Stelle gepinselt werden... Oder so.
Das Ganze kann eigentlich (wenn überhaupt) nur über den WIndowsmanager des Systems gehen, man muß ja die Viewer-Fenster immer geeignet resizen und vor allem immer "eine Ebene über" der Qt-Applikation halten, aber natürlich soll man z.B. Buttons in dieser trotzdem anklicken können... Wahrscheinlich ist die ganze Idee ziemlicher Müll, ich wollte nur einmal Eure Meinung hören...
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Unter linux koenntest du evtl tricksen .... wenn sich das Programm standardkonform verhaelt ....
einfach den XServer umleiten ... und in deiner App nen XServer quasi implementieren ....

Keine ahnung, denk ned das das ueblich ist ... aber vielleicht hasst gleuck und es gibt schon paar impls / bibs fuer

Unter windows gaengs noch komplizierter .... die muesstest die aufrufe zur gui.dll abfangen, und nen ersatz konstruieren ...
die win emulatoren machen sowas ...

Aber das ist alles andere als trivial .....

ne andere moeglichkeit viel mir ned ein ....
Also der einfachere weg ist glaub ich, die Entwickler deiner Viewer zur zusammenarbeit zu bewegen ... und ihre views als Plugins fuer externe Programme zur verfuegung zu stellen ....

Ciao ...
Antworten