hallo,
für ein neues Projekt stellt sich folgende Situation dar:
Ein Qt-Programm soll mit einem C-Programm zusammengefasst werden.
Das C-Programm soll das Hauptprogramm werden, und das Qt-Programm soll in eine function, "Qt-function", umgewandelt werden, die vom Hauptprogramm aufgerufen wird.
Diese function verwendet Qt nur für Visualisierungen, d.h. es sollen Bilder mit grafischen Overlays angezeigt werden. Es sind keine Buttons etc. erforderlich.
Die Frage ist nun:
Genügt es, die "Qt-function" mit den Qt-Bibliotheken zu linken, oder muss das Hauptprogramm ein Qt-Programm sein?
müssen Qt-Bibliotheken mit Hauptprogramm gelinkt sein?
müssen Qt-Bibliotheken mit Hauptprogramm gelinkt sein?
Gruß von qtNiko
Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Würde denn das Qt-Programm unter Gtk laufen?Das ist zu viel Gefrickel. Wenn das C-Programm das Hauptprogramm sein soll verwende Gtk. ...
Ich dachte, es ist ein entweder Qt oder Gtk.
Die Qt-Teile existieren ja bereits.
Gruß von qtNiko
Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Dann würd ich schauen, das C Programm nach C++ zu bekommen.qtNiko hat geschrieben:Die Qt-Teile existieren ja bereits.
Du hast 2 Programme, heißt 2* eine main. Irgend eine main musst du wegnehmen, denn 2*main geht nicht.
Du musst es irgendwie schaffen, dass die beiden Teile miteinander kommunizieren können. Denn ein Konsolen-Programm laufen lassen und dann eine GUI starten und hoffen dass der INput irgendwie zu deinem Konsolenprogramm wandert geht auch nicht. Irgendwo müssen die sich treffen.
Sind die Anwendungen so komplex dass es nicht möglich ist das alles nach C++ zu bekommen?
Oder die GUI so komplex dass man sie nicht mit GTK neu machnen könnte?
Ist die C-Anwendung in einer einzigen ultimativen main() geschrieben, also existieren keine Funktionen die du einfach in dein C++-Programm übernehmen kannst?
Und zum Topic:
Ja, du musst gegen die Qt-Libs linken wenn du Qt-Funktionen verwenden willst.
Und noch schlimmer, du brauchst eine laufende Eventloop (mit einer QApplication-Instanz) wenn du deine Qt-GUI haben willst. Und das ist (wenn es überhaupt gehen sollte, hab das selber nie versucht) eben ein ziemliches Gefrickel und am Ende gehts doch schief.
Das hatte ich schon so vermutet, vor allem mit der Event-Loop.
Die Kollegen vom C-Programm muss ich noch überzeugen, ein Qt-Programm zu machen. Jetzt, mit deinen Argumenten, sollte es leicht sein
Danke für die Unterstützung
Die Kollegen vom C-Programm muss ich noch überzeugen, ein Qt-Programm zu machen. Jetzt, mit deinen Argumenten, sollte es leicht sein
Danke für die Unterstützung
Gruß von qtNiko
Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Schon richtig.Ja, du musst gegen die Qt-Libs linken wenn du Qt-Funktionen verwenden willst.
Und noch schlimmer, du brauchst eine laufende Eventloop (mit einer QApplication-Instanz) wenn du deine Qt-GUI haben willst. Und das ist (wenn es überhaupt gehen sollte, hab das selber nie versucht) eben ein ziemliches Gefrickel und am Ende gehts doch schief.
Aber er hat nur eine Einsprungsfunktion in "Seine QT Welt"
Bevor ich da anfangen wuerde, uralt code umzustellen und anderen programmieren auf die Fuess zu steigen .... wuerd ich lieber mitspielen, und eine C-Dll (Schnittstellentechnisch) bauen, die intern QT verwendet.
Die eventlooop ziehst in der Dllmain statt main() hoch,und nur die dll braucht dann gegen die QT gelinkt werden.
Nen C-Programm auf c++ und qt umzustellen, iss sicher ne gute idee
Ciao ...
Es gibt natürlich auch die Möglichkeit aus einem Qt-Programm einfache Konsolenprogramme zu starten, ihnen Kommandozeilenparameter mitzugeben und die Kommandozeilenausgabe direkt wieder im Qt-Programm einzulesen und daraus was zu machen. Wäre wohl die schnellste und einfachste Lösung, gerade bei zwei unterschiedlichen Entwicklerteams, die jeweils ihre Programme so gut wie fertig haben und keine DLLs o.ä. draus machen wollen/können.
Das Stichwort für die Doku wäre hier "QProcess".
Ein Vorteil der zwei getrennten Prozesse wäre ausserdem die Möglichkeit zur Ausnutzung von 2-Kern-Prozessoren (in einem Kern läuft mit voller Auslastung das C-Programm und rechnet und im anderen das Betriebssystem und die GUI) So bleibt die GUI auch immer ansprechbar, obwohl noch Daten berechnet werden. (verhält sich somit ähnlich dem Multithreading)
Grüße,
Kay
Das Stichwort für die Doku wäre hier "QProcess".
Ein Vorteil der zwei getrennten Prozesse wäre ausserdem die Möglichkeit zur Ausnutzung von 2-Kern-Prozessoren (in einem Kern läuft mit voller Auslastung das C-Programm und rechnet und im anderen das Betriebssystem und die GUI) So bleibt die GUI auch immer ansprechbar, obwohl noch Daten berechnet werden. (verhält sich somit ähnlich dem Multithreading)
Grüße,
Kay
Das ist ja toll, was ich hier alles an Vorschlägen bekomme.
Es gibt doch gleich mehrere Möglichkeiten.
Ich hatte leider vergessen, extra zu sagen, dass die Programme unter Linux laufen. Gilt dann das zur Dll Gesagte auch für eine Library-Funktion?
Das mit QProcess klingt auch gut. Ich werde mir die Möglichkeiten mal näher ansehen.
Danke für die Tipps
Es gibt doch gleich mehrere Möglichkeiten.
Ich hatte leider vergessen, extra zu sagen, dass die Programme unter Linux laufen. Gilt dann das zur Dll Gesagte auch für eine Library-Funktion?
Das mit QProcess klingt auch gut. Ich werde mir die Möglichkeiten mal näher ansehen.
Danke für die Tipps
Gruß von qtNiko
Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration