Seite 1 von 1

müssen Qt-Bibliotheken mit Hauptprogramm gelinkt sein?

Verfasst: 20. März 2010 17:22
von qtNiko
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?

Verfasst: 20. März 2010 18:11
von franzf
Das ist zu viel Gefrickel. Wenn das C-Programm das Hauptprogramm sein soll verwende Gtk. Das funktioniert auch ganz doll und ist in C geschrieben.
Ansonsten würde ich sagen schau dass du das C-Programm nach C++ portierst, das geht schneller und schmerzfreier...

Verfasst: 20. März 2010 18:34
von qtNiko
Das ist zu viel Gefrickel. Wenn das C-Programm das Hauptprogramm sein soll verwende Gtk. ...
Würde denn das Qt-Programm unter Gtk laufen?
Ich dachte, es ist ein entweder Qt oder Gtk.
Die Qt-Teile existieren ja bereits.

Verfasst: 20. März 2010 18:42
von franzf
qtNiko hat geschrieben:Die Qt-Teile existieren ja bereits.
Dann würd ich schauen, das C Programm nach C++ zu bekommen.
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.

Verfasst: 21. März 2010 23:51
von qtNiko
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

Verfasst: 22. März 2010 10:19
von RHBaum
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.
Schon richtig.

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 :-) und sollt man ned aus den Augen verlieren, aber man tut sich eh leichter wenn man schon mal was lauffaehiges hat, das nimmt meist den Zeitdruck.

Ciao ...

Verfasst: 24. März 2010 16:19
von Kay
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

Verfasst: 24. März 2010 18:01
von qtNiko
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 :D

Verfasst: 24. März 2010 22:02
von Kay
Jepp, auch unter Linux brauchst du die Qt-Libraries. Funktioniert ähnlich wie unter Windows, nur dass die Endung anders sind und es keinen Unterschied zwischen Debug- und Release-Library gibt.