Zwei allg. Fragen zur GUI-Entwicklung



  • Hallo,

    ich habe mal zwei Fragen zuf GUI-Entwicklung.

    1. Wenn ich ein fertiges C-Programm vorliegen habe, ist es dann möglich dafür eine GUI mit GTKmm statt GTK+ zu entwicklen und dann das C-Programm darunter laufen zu lassen? Oder ist das nicht vernünftig umsetzbar?

    2. Ich habe mal gelesen, dass Anwendungen (früher) unter Linux vor allen Dingen als Konsolenprogramme mit Parametern umgesetzt werden. Später wird dann ein eigenes GUI Programm geschrieben, das nur die Parameter an das Konsolenprogramm weiterleitet.
    Kann mir jemand erklären wie das funktioniert? Startet dann das GUI Programm einfach beim Start selber das Konsolenprogramm mit (mit unterdrückter Konsole vll.) und bei jedem Klick auf einen Button bspw. wird dann einfach neu gestartet mit anderen Parametern?

    Wäre nett, wenn mir das jemand kurz erklären könnte 🙂 .

    Vaniax



  • Vaniax schrieb:

    1. Wenn ich ein fertiges C-Programm vorliegen habe, ist es dann möglich dafür eine GUI mit GTKmm statt GTK+ zu entwicklen und dann das C-Programm darunter laufen zu lassen? Oder ist das nicht vernünftig umsetzbar?

    Module, die in C geschrieben und übersetzt wurden, sind problemlos in C++ einsetzbar. Dafür muss lediglich der Header des Moduls im C++-Quelltext mit extern "C" {} umschlossen werden und das C-Modul it gebunden werden.

    2. Ich habe mal gelesen, dass Anwendungen (früher) unter Linux vor allen Dingen als Konsolenprogramme mit Parametern umgesetzt werden. Später wird dann ein eigenes GUI Programm geschrieben, das nur die Parameter an das Konsolenprogramm weiterleitet.
    Kann mir jemand erklären wie das funktioniert? Startet dann das GUI Programm einfach beim Start selber das Konsolenprogramm mit (mit unterdrückter Konsole vll.) und bei jedem Klick auf einen Button bspw. wird dann einfach neu gestartet mit anderen Parametern?

    Das kommt natürlich sehr darauf an, was das Konsolenprogramm leistet. Ein Beispiel wäre vielleicht eine GUI für ein Brennprogramm. Die läuft erstmal für sich, solange der Benutzer die Disc am Bildschirm zusammenstellt und Parameter wie Label, Brenngeschwindigkeit etc. bestimmt. Beim Klick auf "brennen" würde die GUI dann im Hintergrund z.B. das Programm "mkisofs --label=%s --output=temp.iso --weitere-optionen ..." aufrufen.

    Dafür muss keine Konsole unterdrückt werden, da Kommandozeilenprogramme problemlos ihre Standardausgabe an das aufrufende Programm weitergeben können, wenn dieses z.B. popen() (POSIX) oder QProcess (Qt) oder Glib::spawn (GTKmm) oder .... verwendet.



  • LordJaxom schrieb:

    Module, die in C geschrieben und übersetzt wurden, sind problemlos in C++ einsetzbar. Dafür muss lediglich der Header des Moduls im C++-Quelltext mit extern "C" {} umschlossen werden und das C-Modul it gebunden werden.

    Achso, davon habe ich auch schon gehört. Dann kann ich ja einfach in den an die Signale gebundenen Funktionen meine Funktionalitäten aufrufen ohne mein Programm nach C++ zu portieren.

    LordJaxom schrieb:

    Das kommt natürlich sehr darauf an, was das Konsolenprogramm leistet. Ein Beispiel wäre vielleicht eine GUI für ein Brennprogramm. Die läuft erstmal für sich, solange der Benutzer die Disc am Bildschirm zusammenstellt und Parameter wie Label, Brenngeschwindigkeit etc. bestimmt. Beim Klick auf "brennen" würde die GUI dann im Hintergrund z.B. das Programm "mkisofs --label=%s --output=temp.iso --weitere-optionen ..." aufrufen.

    Ah ok, bei so einem Programmaufbau kann das ja sinnvoll sein so vorzugehen.

    LordJaxom schrieb:

    Dafür muss keine Konsole unterdrückt werden, da Kommandozeilenprogramme problemlos ihre Standardausgabe an das aufrufende Programm weitergeben können, wenn dieses z.B. popen() (POSIX) oder QProcess (Qt) oder Glib::spawn (GTKmm) oder .... verwendet.

    Bisher kannte ich nur das Pipelineprinzip unter Linux, von diesen Funktionen habe ich jetzt nocht nichts gehört. Aber gut zu wissen das sowas ohne großen Aufwand geht.

    Vielen Dank für die hilfreiche Antwort 👍 .


Anmelden zum Antworten