Welche GUI soll ich nehmen?



  • fltk



  • Atlan schrieb:

    @dot & mechanics
    dot ist für wxWidgets und Mechanics für Qt?

    Wenn es zu Lernzwecken sein soll, wäre ich ehrlich gesagt für die WinAPI... 😉



  • @dot
    laut Mechanics ist die sehr kompliziert. Was spräche denn für die WinAPI und im Zuge dessen gegen MFC (was meines Wissens nach dieselbe GUI Funktionalität besitzt) und Qt?

    @knivil
    Wo wie ich das verstanden habe sieht die GUI mit FLTK zwar überall gleich aus, dreht aber auch sein eigenes Ding und rendert alles selbst. Oder liege ich falsch?



  • Atlan schrieb:

    @dot
    laut Mechanics ist die sehr kompliziert. Was spräche denn für die WinAPI und im Zuge dessen gegen MFC (was meines Wissens nach dieselbe GUI Funktionalität

    Für die WinAPI spräche, dass du lernen würdest, wie der Kram im Hintergrund funktioniert.Und Erfahrung mit der System-API ist immer brauchbar. Gegen MFC spricht, dass MFC hoffnungslos veraltet ist, gegen Qt spricht rein prinzipiell nicht viel, aber Qt is halt, was man verwenden würde, wenn man schnell und einfach ein GUI zusammenklicken will und dies wirklich um jeden Preis in C++ geschehen muss; zu lernen gibt es dort wohl nicht viel...

    Atlan schrieb:

    [...] dreht aber auch sein eigenes Ding und rendert alles selbst. Oder liege ich falsch?

    So wie Qt... 😉



  • Sobald eine OpenGL-ES basierte C++ GUI ohne Knebel-Lizenz mit 2D-Bibliothek rauskommt werde ich den ganzen GUI-Scheiß der sich seit Jahren nicht bessert hinter mir lassen.
    Ich kann nicht nachvollziehen, wie man die WinAPI als Lehrbeispiel empfehlen kann. Damit man alle möglichen Casts kennenlernt? Oder damit man eben auch mal selber Controls mit archaischen Mitteln auf unbenutzbaren APIs implementiert, weil die API selber praktisch nichts mitbringt?



  • decimad schrieb:

    Ich kann nicht nachvollziehen, wie man die WinAPI als Lehrbeispiel empfehlen kann. Damit man alle möglichen Casts kennenlernt? Oder damit man eben auch mal selber Controls mit archaischen Mitteln auf unbenutzbaren APIs implementiert, weil die API selber praktisch nichts mitbringt?

    Nope, weil man dort zumindest was nützliches lernen kann. Was lernt man denn schon, wenn man einen Button auf eine Form zieht, insbesondere wenn man das sowieso schon jahrelang in Java gemacht hat? Wenn es um Produktivität ginge, wäre das natürlich was anderes, dann wäre aber C++ sehr wahrscheinlich sowieso die falsche Wahl. Für den selten sinnvollen Fall, dass tatsächlich Anwendungsentwicklung in C++ betrieben werden soll, gibt es dann Qt. Hier ging es aber drum, was zu lernen. Das x-te GUI Toolkit verwenden, wenn man davor eh schon mit anderen Toolkits gearbeitet hat, wird einem kaum was neues lernen. Mit roher WinAPI wird man wenigstens gezwungen, mal selbst GUI Funktionalität zu kapseln, dabei kann man zumindest Programmiererfahrung in C++ sammeln und kommt auch noch mit der System-API in kontakt, was imo sowieso wichtig ist für jeden, der einen tatsächlichen Grund hat C++ zu verwenden...



  • @dot
    wie käme ich denn an die WinAPI ran, um damit ein Fenster zu machen und kannst du mir ein gutes Tutorial dafür empfehlen? Ich habe schon ein bisschen geguckt und wurde erschlagen 😃
    Es geht mir zwar eher darum eine GUI zu machen und dann die Logik dazu zu entwerfen. Mit der GUI wollte ich mich nicht so lange aufhalten aber sich die WinAPI mal anzusehen wäre bestimmt nicht schädlich 😃 vielleicht bleibe ich dann dabei.

    @decimad
    Ich war schon immer ein großer Freund davon Dinge selber zuschreiben und nicht aus irgendeiner Lib oder API zunehmen. Zur Not könnte ich mir die fehlenden Funktionalitäten aus externen Libs zusammensuchen. Oder ist die WinAPI so unverständlich, dass keiner damit was anfangen kann?



  • Atlan schrieb:

    @knivil
    Wo wie ich das verstanden habe ...

    Willst du diskutieren oder suchst du etwas einfach benutzbares ... und willst es auch benutzen?

    Ich möchte keine Gigantischen Programme schreiben sondern das Framework sollte nicht allzu kompliziert sein, aber dennoch alles können, was ich auch aus Java kenne

    Keine Ahnung, was du aus Java kennst, aber Listener gibt es nicht.

    gegen Qt spricht rein prinzipiell nicht viel

    Gross, umfangreich, komplex, zeitintensiv koennen Nachteile sein.



  • Dabei spräche eigentlich überhaupt nichts gegen eine effiziente und produktive GUI in C++, nur macht sich halt niemand die Mühe, es gibt keinen Drive. Dass Herb Sutter jetzt bei Microsoft rumlungert lässt auch nicht erwarten, dass deren Anstrengungen im C++-Standard auf etwas portables wiederverwendbares und im produktiven Umfeld nutzbares hinausläuft. Das ginge ja gegen die Interessen seines Arbeitgebers.
    Wenn nVidias Path Rendering extension irgendwie Open-Source gemacht würde, wäre meiner Meinung nach schon viel gewonnen. Die Grafik-Seite wäre dann in Kombination mit einem OpenGL-C++-Wrapper (gibts ja auch fertig) abgehandelt und das auf vielen Plattformen zugleich. Ich werde mein Homebrew-GUI-Toolkit (was meint ihr, wieviele es davon auf der Welt inzwischen gibt?) auf jeden Fall mal darauf "portieren".



  • @knivil
    Diskutieren will ich nicht. Ich suche einfach ein Framework, dass ich benutzen kann.
    Also kann ich einen Button nicht ohne Weiteres darauf reagieren lassen, dass z. B. die Maus darüber ist ohne zu klicken? Oder auf einen Tastendruck? Oder wird das dort einfach anders genannt?
    In Java gab es sog. Events, die alle vordefiniert waren aber auch selbst hinzugefügt werden konnten und sämtliche Komponenten konnten sog. Listener implementieren um auf Events reagieren zu können.

    Vielleicht sollte ich noch einmal mein Ziel erläutern: Ich möchte Anwendungen schreiben, um C++ zu lernen. Etwas kommerzielles wird nicht dabei sein. In Java konnten die Frameworks mit dem Framework hantieren und das wars's. Den Rest musste ich mir aus der API nehmen oder selber schreiben. Sowas suche ich in C++. Wenn noch mehr dabei ist, wäre das natürlich cool.

    Qt wäre das, was ich aus Java kenne: GUIs zusammenklicken und mit einer Logik versehen.
    Die WinAPI wäre etwas Anderes. Da müsste ich die GUI ebenfalls schreiben und kann sie nicht zusammenklicken, was auch mal ganz reizvoll wäre.

    Nach aktuellem Stand wäre fltk am nächsten an dem dran, was ich aus Java kenne.
    Dann wird das wohl eine Entscheidung zwischen Qt, fltk und der WinAPI, da keiner WxWidgets genannt hat und das wahrscheinlich so ähnlich wie Qt ist.



  • Atlan schrieb:

    wie käme ich denn an die WinAPI ran [...]

    Die WinAPI ist Teil des Betriebssystems, alles was du brauchst sind entsprechende Header und Import Libs. Verwend am besten die aktuelle Version von Visual Studio, das bringt alles nötige bereits mit.

    Atlan schrieb:

    [...] und kannst du mir ein gutes Tutorial dafür empfehlen?

    leider kenn ich keines...

    Atlan schrieb:

    Es geht mir zwar eher darum eine GUI zu machen und dann die Logik dazu zu entwerfen. Mit der GUI wollte ich mich nicht so lange aufhalten [...]

    Dann stellt sich wiederum die Frage wieso es jetzt C++ sein soll, denn wenn es vor allem einfach sein soll, ist C++ definitiv die falsche Sprache...

    Atlan schrieb:

    Oder ist die WinAPI so unverständlich, dass keiner damit was anfangen kann?

    WinAPI ist nicht so schlimm, es ist halt einfach low-level. Für ihr Alter und ihre Größe ist die WinAPI allerdings imo sogar ziemlich sauber, gibt da wesentlich Schlimmeres...

    Atlan schrieb:

    Also kann ich einen Button nicht ohne Weiteres darauf reagieren lassen, dass z. B. die Maus darüber ist ohne zu klicken? Oder auf einen Tastendruck? Oder wird das dort einfach anders genannt?

    Klar geht das. Was denkst du, wie all diese Framework und Toolkits implementiert sind? 😉 Ganz unten verwendet alles notwendigerweise irgendwo die WinAPI. Die Windows API ist die Schnittstelle zu Betriebssystem. Um unter Windows auch nur irgendwas zu machen, musst du an irgendeinem Punkt mit dem System reden, ohne kannst du nichtmal ein Programm starten, geschweige denn ein Fenster öffnen. Diese API ist halt relativ low-level, daher gibt es all diese Toolkits, die eine angenehmere Welt oben drauf setzen und den komplizierten Kram vor dir verbergen. Aber selbst wenn du Java verwendest, wird unter Windows an irgendeiner Stelle die WinAPI ins Spiel kommen, nur halt irgendwo ganz unten in der Implementierung von Java...

    Atlan schrieb:

    In Java gab es sog. Events, die alle vordefiniert waren aber auch selbst hinzugefügt werden konnten und sämtliche Komponenten konnten sog. Listener implementieren um auf Events reagieren zu können.

    Ja, so ist das in vielen Toolkits. Die WinAPI funktioniert ähnlich, aber es passiert halt nichts von selbst. Wenn du willst, dass Events verteilt und verarbeitet werden, musst du dafür sorgen, dass Events verteilt und verarbeitet werden...

    Atlan schrieb:

    Vielleicht sollte ich noch einmal mein Ziel erläutern: Ich möchte Anwendungen schreiben, um C++ zu lernen.

    Und was genau für eine Anwendung? Wenn du mich fragst, wäre es wesentlich sinnvoller, wenn du dir z.B. die SFML schnappst und ein kleines 2D Spiel programmierst oder sowas. Da wirst du wesentlich mehr C++ brauchen als beim Implementieren irgendwelcher UI Logik auf Basis irgendeines Toolkits oder Frameworks...



  • Also kann ich einen Button nicht ohne Weiteres darauf reagieren lassen, dass z. B. die Maus darüber ist ohne zu klicken?

    ... doch das geht alles, nur anders ... ohne Listener. Und "ohne weiteres" gibt es nirgends, nicht mal in Java.


  • Mod

    Schmeisse mal lib cinder einfach ein. Wenns nur 2D UI sein muss, kann cinder sehr viel, aktuell für Win und MacOS verfügbar:
    http://libcinder.org

    Ansonsten, Qt muss man nicht bezahlen, die LGPL Version ist frei verfügbar.
    Qt ist auch das Framework was sich am schnellsten weiter entwickelt, QML kann man langsam ernstnehmen,
    auch wenn noch für den Desktop einiges fehlt.



  • @dot
    Vom Visual Studio habe ich die neueste Express Version.
    Dann suche ich mir mal ein Tutorial aus.
    Einfach soll es nicht sein. C++ schon 🙂 Ich halte C++ füt eine sehr mächtige und schnelle Sprache. Wenn ich C# nehmen soll kann ich auch bei Java bleiben.
    Mit Low-Level hätte ich kein Problem.

    Ich denke, ich werde mir mal die WinAPI ansehen und wenn sie mir zu kompliziert ist, werde ich wohl mit fltk oder Qt weitermachen.
    Danke. Ihr habt mir alle sehr geholfen. 😃



  • Atlan schrieb:

    Wenn ich C# nehmen soll kann ich auch bei Java bleiben.

    Oh glaub mir, C# ist Java sprachlich dermaßen überlegen...würdest du C# kennen, würdest du niemals freiwillig Java verwenden wo es sich vermeiden lässt... 😉

    Abgesehen davon: Ich halte eine GUI immer noch für kein besonders gutes Beispiel um C++ zu lernen und möchte an dieser Stelle nochmal auf meinen obigen Vorschlag mit dem Spiel hinweisen. Und wenn du C++ selbst erst lernen musst, würde ich unbedingt zu einem guten Buch raten und auf keinen Fall zu einem Tutorial ⚠ ...



  • Ein Buch habe ich. C++ lernen und professionell anwenden von Ulla Kirch-Prinz und Peter Prinz in der 3. Auflage.

    Cinder ist wohl eher nichts für mich, da ich was C++ angeht noch ein Neuling bin.
    Etwas, was man "langsam ernstenehmen" kann ist wohl auch eher nichts. Da laufe ich Gefahr Dinge nicht zu finden, die ich aber gerne hätte oder ich stolpere über einen Bug. Trotzdem danke.

    Eigentlich möchte ich durch die GUI nur die umständliche Konsole ersetzen. Aber wenn ich dabei gleich ein bisschen Erfahrung im Coden sammeln kann umso besser.

    Das C# Java so weit überlegen ist wusste ich nicht. Aber es soll Java ähnlich sein. Und eigentlich wollte ich eine neue Sprache lernen. (Java und C++ ähneln sich zwar auch aber angeblich nicht so sehr, wie Java und C#)



  • Fang endlich an! 😉



  • dot schrieb:

    Natürlich stellt sich unweigerlich die Frage: Wieso eine riesige Library mitliefern, die nichts anderes tut, als das Betriebssystem zu imitieren, wenn man auch einfach das Betriebssystem verwenden könnte.

    Naja...
    - "riesige Library" spielt für uns und für die meisten anderen überhaupt keine Rolle. Unsere Software (also, alles was erstmal installiert wird) ist an sich schon paar GB groß, zusammen mit den Daten, die man üblicherweise verwendet, hunderte GB oder wenige TB. Selbst wenn nicht, spielt es für die meisten anderen auch keine Rolle. Dann liefert man halt noch 10 MB Dlls mit, OMG.
    - Weil die Library das tut, und nicht du 😉 Ich finde, es ist unendlich viel mehr Aufwand, mit direkt mit der WinApi zu arbeiten, als mit einer entsprechenden Bibliothek. GUI unterteilt sich für mich in zwei Sachen. Zum einen gibts komplett uninteressante, lästige Standardsachen, die man schnell hinter sich bringen will. z.B. schnell einen Einstellungsdialog mit paar Eingabefeldern und Buttons hinrotzen. Geht mit Qt in einer halben Stunde, mit der WinApi müsste man erstmal jeden möglichen Scheiß von Hand machen. Warum sollte sich das irgendjemand antun? Und dann hat am Ende auch einen Haufen Boilerplate Code, den man auch irgendwann auch warten muss.
    Zum anderen gibts auch (öfter) GUI Komponenten, die viel komplexer als irgendwelche Standardgeschichten sind. Und wenn die Bibliothek hier schon was bietet, schön. Allein die Layouts wären ein Grund, ein entsprechendes Framework zu verwenden. Es gibt in Windows z.B. nichts, was mit einer QTreeView vergleichbar wäre. Also, Baumansicht mit mehreren Spalten. Es gibt auch keine Labels, Tooltips usw., die ohne weiteres HTML rendern können. Sehr praktisch, wenn man sich dran gewöhnt hat. In Qt gibts Stylesheets und damit kann man das Aussehen sehr einfach und ziemlich flexibel anpassen. Das Konzept mit den Models und Delegates erlaubt es auch, relativ elegant an vielen Stellen einzugreifen und etwas anzupassen. In der WinApi gibt es keine Konzepte. Du reagierst auf WM_PAINT und machst was du willst. Das wird erfahrungsgemäß nicht elegant, jeder wirds machen, wie er will, nicht wiederverwendbar, nicht wartbar.
    Also versteh ich deine Frage nicht so ganz. Ein entsprechendes Framework bietet sehr viele Vorteile gegenüber der reinen WinApi.

    Die WinApi find ich ungeeignet, um irgendwas zu lernen. Klar, Qt ist nur ein weiteres Gui Toolkit, da lernt man nicht viel interessantes. Aber das ist zumindest einfacher und angenehmer als die WinApi. Kann gut sein, dass man die WinApi nie brauchen wird, also braucht man sich da auch nicht großartig reinzudenken.

    @Atlan: warum willst du die Dlls nicht einzeln mitausliefern? Das ist kein Nachteil. Die eigenen Programme, die man schreibt, bestehen auch sehr oft aus vielen Dlls und nicht aus einer monolithischen Exe.



  • Mechanics schrieb:

    Naja...
    - "riesige Library" spielt für uns und für die meisten anderen überhaupt keine Rolle. Unsere Software (also, alles was erstmal installiert wird) ist an sich schon paar GB groß, zusammen mit den Daten, die man üblicherweise verwendet, hunderte GB oder wenige TB. Selbst wenn nicht, spielt es für die meisten anderen auch keine Rolle. Dann liefert man halt noch 10 MB Dlls mit, OMG.

    Es mag keine Rolle spielen, trotzdem ist es keine saubere Lösung und ich finde es weder gut noch empfehlenswert...

    Mechanics schrieb:

    Ich finde, es ist unendlich viel mehr Aufwand, mit direkt mit der WinApi zu arbeiten, als mit einer entsprechenden Bibliothek.

    Ich habe auch nie behauptet, dass es weniger Aufwand wäre, mit der WinAPI zu arbeiten...

    Mechanics schrieb:

    Also versteh ich deine Frage nicht so ganz. Ein entsprechendes Framework bietet sehr viele Vorteile gegenüber der reinen WinApi.

    Ich glaub du verstehst mich falsch, ich argumentiere hier nicht gegen den Produktiveinsatz von Frameworks, Toolkits, etc.
    Ich stelle allerdings die Frage in den Raum, wieso C++ verwendet wird, wenn Produktivität eine dermaßen große Rolle spielt...

    Mechanics schrieb:

    Aber das ist zumindest einfacher und angenehmer als die WinApi.

    Ja; genauso ist Python auch einfacher und angenehmer als C++ und Zivilisation angenehmer als allein in der Wildnis überleben...

    Mechanics schrieb:

    Kann gut sein, dass man die WinApi nie brauchen wird, also braucht man sich da auch nicht großartig reinzudenken.

    Um unter Windows mit dem System zu reden, braucht man die WinAPI. WinAPI ist sehr viel mehr als nur das bisschen Zeug was Fensterchen macht. Die WinAPI ist die Schnittstelle zum ganzen Betriebssysystem. Wenn man C++ programmiert, wird man früher oder später mit dem System reden wollen. Wenn nicht, hat man mit C++ sehr wahrscheinlich von vorn herein die falsche Sprache gewählt. Wenn man sich unbedingt einbildet, C++ verwenden zu müssen, um ein GUI zu bauen und dabei etwas lernen will, hat man imo mehr davon, sich dabei mal anzuschauen, wie so GUI Kram im Hintergrund wirklich funktioniert und gleichzeitig mit der WinAPI vertraut zu werden, als in C++ wieder das zu machen, was man zuvor schon in Sprache XY gemacht hat und was man in jeder anderen Sprache genausogut nur einfacher machen könnte...



  • dot schrieb:

    Wenn man C++ programmiert, wird man früher oder später mit dem System reden wollen.

    Oder auch nicht unbedingt... Bei uns in der Firma hat kaum jemand direkt mit der WinApi zu tun. Das sind vielleicht 2-3 Leute, mich eingeschlossen. Wir bauen etwas an der Qt selber rum, wenn uns etwas nicht passt (und wir verwenden sie auch für Dateisystemzugriffe und Netzwerkkommunikation), dann haben wir eine COM Zwischenschicht, um die wir uns kümmern müssen, und natürlich muss man ab und zu verschiedene Problemchen beheben, wenn man mit anderen Programmen interagiert. Sonst hat keiner irgendwas mit der WinApi zu tun.


Anmelden zum Antworten