Welche GUI soll ich nehmen?
-
Atlan schrieb:
Was ist mit der WinAPI?
Das hängt davon ab was du konkret machen willst. Ein Punkt, mal von MOC abgesehen, der mir persönlich an Qt missfällt, ist, dass Qt eben nicht die native Windows GUI verwendet, sondern sein eigenes Süppchen kocht. Ich persönlich würde jedem raten, mal mit der WinAPI zu arbeiten. Wenn du ein komplexeres GUI brauchst, dann ist C++ imo sowieso die falsche Sprache. In dem Fall würde ich eher zu C# raten...
-
Ja, Qt verwendet für die meisten Sachen nicht die native Windows GUI, das ist für mich jetzt auch nichts negatives. Das schaut zumindest sehr nativ aus. Und es gibt eigentlich kaum ein Programm, dass die native Windows GUI verwendet, die meisten Frameworks und Programme zeichnen irgendwas selber.
Ich finde jetzt auch nicht unbedingt, dass man für komplexe GUIs C# braucht. WinForms ist kaum mächtiger als Qt (abgesehen von Data Binding) und WPF wirst du wohl kaum als native Windows GUI bezeichnenUnsere GUI ist sehr komplex und wir kommen wunderbar mit Qt zurecht.
-
Mechanics schrieb:
Ja, Qt verwendet für die meisten Sachen nicht die native Windows GUI, das ist für mich jetzt auch nichts negatives. Das schaut zumindest sehr nativ aus.
Aber es fühlt sich, zumindest imo, nicht zu 100% so an, auch wenn es zugegebenermaßen mitterlweile doch eine sehr gute Approximation liefert. 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. Und was, wenn eine neue Version des Betriebssystems irgendwas ändert oder neu einführt, das von der aktuellen Qt-Imitation nicht berücksichtigt wird...
Mechanics schrieb:
Und es gibt eigentlich kaum ein Programm, dass die native Windows GUI verwendet, die meisten Frameworks und Programme zeichnen irgendwas selber.
Da muss ich widersprechen, wxWidgets (wurde ja bereits genannt) oder WTL nutzen afaik z.B. die native GUI.
Mechanics schrieb:
Ich finde jetzt auch nicht unbedingt, dass man für komplexe GUIs C# braucht.
Sag ich auch nicht, es ist allerdings wesentlich einfacher und man wird für Anwendungsentwicklung eher selten wirklich C++ brauchen. Und dann gibt es immer noch Interop...
Mechanics schrieb:
[...] und WPF wirst du wohl kaum als native Windows GUI bezeichnen
Würde ich schon, auf jeden Fall viel eher als Qt...
Mechanics schrieb:
Unsere GUI ist sehr komplex und wir kommen wunderbar mit Qt zurecht.
Das freut mich zu hören; ich sagte ja aber auch nicht, dass ihr eure funktionierende Qt Anwendung spaßhalber nach C# portieren sollt...
-
[hier sollte ursprünglich ein unglaublicher Hass-Kommentar stehen, der schildern sollte, warum Qt bei gleicher Grafik der Win32-API vorzuziehen ist, er fiel der Eigenzensierung zum Opfer]
-
Da Du scheinbar nur Windows im Focus hast würde ich noch die gute alte MFC in die Runde werfen.
Ich bevorzuge sie aus den "gleichen Gründen" wie die anderen QT - ich arbeite damit seit 15 Jahren und kenne sie halt am besten.Gruß Andreas Georg
-
@fwbp34
Der Vorteil von MFC wäre, dass es alles hat, was Microsoft an GUI Elementen jemals rausgebracht und nicht ersetzt hat. Also auch die Ribbons.
Aber ich habe nicht gefunden, dass noch was darüber hinaus hat. Ist das ein reines Framework? Und gibt es einen Weg da kostenlos legal ranzukommen?@Mechanics
Dann müsste ich Qt kaufen, um ein "vollständiges" Programm zu compilieren?@dot
Ich möchte Programme zu Lernzwecken oder vielleicht mal für die Schule schreiben. Aber dennoch möchte ich C++ benutzen. Komplexe GUIs werden es wohl (fürs Erste) nicht werden. Interop: zwei Sprachen wollte ich erstmal nicht lernen.@dot & mechanics
dot ist für wxWidgets und Mechanics für Qt?
-
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ätFü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ädlichvielleicht 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.
-
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.orgAnsonsten, 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++ schonIch 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.