Die endlose Geschichte der GUI-Libraries
-
Artchi schrieb:
GTKmm gefällt mir laut Doku sehr gut, GTK in der aktuellen Version sieht sogar auf Windows sehr gut aus. Also habe ich mich daran gemacht eine Entwickler-Lib runter zu laden. 1. es gibt mehrere Distributionen, die man nicht mal auf der eigentlichen gtkmm-Website findet.
[...]
Dann habe ich auf einer der Distri-Seiten noch einen Hinweis gesehen, das die aktuelle GTKmm als VC++7.1 Compilat mit einem Runtime-Error garantiert abstürzt. Dieser Hinweis war in rot und direkt unter dem Downloadlink. Der Bug wird dem VC++7.1 zugeschrieben, welcher auch MS bekannt sein soll und in VC++8.0 behoben wird. Fazit: Praktisch unnutzbar, wenn man nicht MinGW benutzt!Die "offizielle" Distribution ist AFAIK die auf http://www.pcpm.ucl.ac.be/~gustin/win32_ports/
Warum die nicht auf www.gtkmm.org verlinkt ist, weiss ich nicht. Und die dortige Warnung spricht von
some gtkmm programs, built on win32 using the MSVC.Net 2003 compiler, might crash [...]
The gtkmm and MSVC developers are aware of this bug, which should/will hopefully be fixed in Visual Studio 2005 beta 2.Klingt also bei weitem nicht so schlimm, wie du's darstellst.
Jetzt kommt aber der Hammer (im positiven Sinne): FOX-Toolkit wurde hier im Forum vor ca. 1 oder 2 Monaten zum ersten und einzigen Mal genannt.
Wird seit Ewigkeiten in der Rund um die Programmierung-FAQ zur GUI-Programmierung erwaehnt
Eines der Beispiele gebaut und gestartet uuuuuund es funktioniert! Es funktioniert!!! Dann alle anderen Beispiele (auch OpenGL-Beispiele) gebaut und gestartet... locker flockig geschmeidig!
<Ironie>
Sag bloss, die mitgelieferten Beispiele funktionieren
</Ironie>Die Fox-Klassen sind logisch, intuitiv, sauber, keine Makros, VC++-IDE kann deshalb locker durchnavigieren und Intellisence anbieten. Super C++-Design!
wie weiter oben schon jemand gesagt hat, baut FOX sein ganzes Messaging-System auf Macros auf... Sehr toll, das kann sogar wxWidgets
Man kann auf der fox-tookit Seite einen Calculator der mit der Lib statisch verlinkt ist downloaden: 512kb! Denke aber mal, das nur verlinkt wird, was benötigt wird.
mit Strip und upx bring ich sogar eine wxWidgets Anwendung auf 512 kb
Ich will dich jetzt nicht schlecht machen, aber IMO machst du ziemlich unqualifizierte Aussagen
-
sarfuan schrieb:
Artchi schrieb:
Wer Kohle hat, greift zu Qt, welches ich auch schon ausprobiert habe und einfach zu benutzen ist.
Anmerkung hierzu:
http://www.trolltech.com/newsroom/announcements/00000192.html?cid=20
Das Thema haben wir hier schon mal durch gekaut: Nur wer einen GNU-Compiler benutzt, wird auch in den Geschmack der GPL kommen. Weiterhin will nicht jeder seine Software OpenSource machen, was bei vielen anderen kostenlosen GUI-Toolkits auch möglich ist. Für viele Windowsler (wie mich) ist die GPL uninteressant. Ob ClosedSource evil ist oder nicht, möchte ich aber nicht diskutieren.
-
Blue-Tiger schrieb:
Die "offizielle" Distribution ist AFAIK die auf http://www.pcpm.ucl.ac.be/~gustin/win32_ports/
Hab ich dann auch irgendwann entdeckt und mußte wie gesagt feststellen, das in der devel-Installation (devel steht doch für Developer? Falls nicht, bitte aufklären) keine *.h und keine *.lib drin sind.
Blue-Tiger schrieb:
Wird seit Ewigkeiten in der Rund um die Programmierung-FAQ zur GUI-Programmierung erwaehnt
OK, ich schau da ehrlich nicht rein, weil ich hier auch nie Fragen stelle bzw. keine Fragen habe.
Blue-Tiger schrieb:
<Ironie>
Sag bloss, die mitgelieferten Beispiele funktionieren
</Ironie>Ich will ja nichts sagen (auch wenn du es belustigend findest) aber ich hab schon so manche Libs mit Beispielen runter geladen, wo einfach Fehler drin waren. Außerdem war das "Funktionieren" darauf bezogen, das ich einfach nur das FOX-Archiv ausgepackt und die Projektmappe in VC++ geöffnet habe. Ohne erstmal groß mit make, bjam oder was weiß ich zu hantieren oder an den Compiler-Settings zu machen. Wie oft haben hier schon Leute verzweifelt versucht Boost zu erstellen? Es ging mir nur um die wenigen und vorallem idiotensicheren Arbeitsschritte.
Blue-Tiger schrieb:
wie weiter oben schon jemand gesagt hat, baut FOX sein ganzes Messaging-System auf Macros auf... Sehr toll, das kann sogar wxWidgets
Ich habe wie gesagt erst gestern abend FOX ausprobiert. Und ich habe im Messaging-System keine Makros gefunden. Falls du die enums meinst: das ist ja wohl das normalste der Welt in C++! enums sind keine Makros, sondern ein Sprachmerkmal von C++. Aber ich werde mich die nächsten Tage in FOX einarbeiten, um genaueres sagen zu können. Habe ja nur meine ersten Eindrücke geschildert.
Blue-Tiger schrieb:
Ich will dich jetzt nicht schlecht machen, aber IMO machst du ziemlich unqualifizierte Aussagen
No Comment! Da steh ich drüber. :p
-
Artchi schrieb:
cd9000 schrieb:
Wo ist dieser Hinweis?
Ich habe gtkmm noch nicht wirklich benutzt, aber die Beispiele lassen sich mit Visual C++ 7.1 einwandfrei kompilieren und ausführen (gtkmm-2.6.1).Auf http://www.pcpm.ucl.ac.be/~gustin/win32_ports/gtkmm.html bei Important Warning.
Oh, von der Seite hab ichs gar nicht runtergeladen.
Tritt wohl eher selten auf und die Schuld liegt nicht bei gtkmm.Hmm... ist aber schon ziemlich ärgerlich, wenn ein gtkmm-Programm bei bestimmten Konstrukten einfach abstürzt. Dass es nicht an gtkmm liegt, zeigt aber der kleine Beispielcode von Bugzilla.
edit: Die gtkmm-FAQ sagt dazu auch etwas (4.13). Das Problem tritt dann auf, wenn man von einer gtkmm-Klasse ableitet und bestimmte Basisklassenkonstruktoren aufruft. Der FAQ zu Folge lässt sich das Problem relativ gut umgehen, indem man andere Konstruktoren aufruft.
-
Artchi schrieb:
Das Thema haben wir hier schon mal durch gekaut:
Haben "wir"? Wo?
Nur wer einen GNU-Compiler benutzt, wird auch in den Geschmack der GPL kommen.
Wo ist der Zusammenhang zwischen GPL und "nur GNU-Compiler"?
Für viele Windowsler (wie mich) ist die GPL uninteressant.
Wo ist der Zusammenhang zwischen Betriebssystem und "GPL uninteressant"?
-
VCF nicht vergessen
Hab zwar noch nicht mit gearbeitet, aber immerhin sagen sie auch, dass dass sie ein sauberes c++GUI-Framework haben wollen
<Ironie>
Sag bloss, die mitgelieferten Beispiele funktionieren
</Ironie>Da kann ich Artchi nur recht geben. Dass Beispiel-Projekte etc. immer auf Anhieb compilieren und laufen, kann man nun wirklich nicht sagen.
Hätte aber auch mal nen anderen Compiler als VC++ ausprobieren können. In der Windows-Welt wird der meistens am besten gepflegt.
-
sarfuan schrieb:
Artchi schrieb:
Das Thema haben wir hier schon mal durch gekaut:
Haben "wir"? Wo?
Kann ich leider nicht mehr finden. Hab nur einen Qt-Beitrag aus diesem Jahr per Suchfunktion gefunden. Bin mir aber sicher, das mal die Trolltech-Ankündigung auch hier gepostet und entsprechend behandelt wurde.
sarfuan schrieb:
Nur wer einen GNU-Compiler benutzt, wird auch in den Geschmack der GPL kommen.
Wo ist der Zusammenhang zwischen GPL und "nur GNU-Compiler"?
Für Trolltech scheint es diesen Zusammenhang zu geben, werden wohl die Mentalitätsgründe sein:
Commercial compiler support - the tools shipped with the GPL version support the popular GNU CC compiler. The C++ compilers from Microsoft, Intel and Borland are not supported by the tools in the GPL version.
Quelle: http://www.trolltech.com/developer/faqs/duallicense.html?cid=20#q18
sarfuan schrieb:
Für viele Windowsler (wie mich) ist die GPL uninteressant.
Wo ist der Zusammenhang zwischen Betriebssystem und "GPL uninteressant"?
Siehe zweite Antwort.
Bin der Meinung, das GPL-Liebhaber eher zu Linux wechseln. Ich hab ja nicht geschrieben alle Windowsler, sondern viele. Viele werden sicherlich kostenlose Software benutzen oder entwickeln wollen. Aber OpenSource ist trotzdem nicht jeder Manns Geschmack. Und unter Linux werden denke ich einfach mal mehr Leute eher auf OpenSource schwören. Und das scheint ja auch Trolltech mit zumachen, in dem sie erst jetzt Windows einbeziehen, aber blos nicht den evil VC++ u.a. ClosedSource Compilern.
Jedenfalls legen sie VC++-Usern offiziell Steine in den Weg. Ob man es über Trick17 trotzdem hinbekommt, ist ja was anderes.
Ist ja auch egal...
-
So, habe mich an das FOX-Tutorial rangemacht. Es werden tatsächlich Makros eingesetzt, die ich gegenüber anderen makroverseuchten GUIs ala wxWidgets ehrlich nicht sichten konnte. Im Prinzip benutzt FOX irgendwie eine merkwürdige Kombination. Enums und Objekte werden für Messages und Events hin und her geschickt, was ich für i.O. halte. Auf der anderen Seite wird für widerkehrende Aufgaben Makros benutzt:
The macro FXDECLARE(ScribbleWindow) declares a number of member functions which every object derived from FXObject should have; we've used a macro as it is always the same, and more convenient to program this way.
Werde mal in dem Tutorial weiter machen und schauen was noch so passiert. Trotzdem denke ich momentan noch das FOX-Toolkit gegenüber anderen GUI-Libs runder ist. Runter laden und loslegen!
Die Makros hätte man sich sicherlich ersparen können... sehr wünschenswert!!!
Aber wie mein Topic-Titel (leider) irgendwie voraus gesehen hat: es ist anscheinend wirklich eine endlose Geschichte?!
-
Von namespaces hat das Fox-Toolkit wohl auch noch nix gehört...
-
namespace schrieb:
Von namespaces hat das Fox-Toolkit wohl auch noch nix gehört...
Trifft aber auf alle mir bekannten GUI-Libs zu.
-
VCF pack alles in den Namensraum VCF. Auch sonst finde ich es recht sauber und Makros scheinen auch eher die Ausnahme zu sein. Das einzige was mich dran stört ist das es noch in der Entwicklung ist und ausser VC eignetlich noch nichts so wirklich einbahnfrei läuft. Hat aber Potenzial.
-
Walli schrieb:
namespace schrieb:
Von namespaces hat das Fox-Toolkit wohl auch noch nix gehört...
Trifft aber auf alle mir bekannten GUI-Libs zu.
gtkmm verwendet jedenfalls namespace anstelle Prefixes.
-
FOX benutzt auch einen Namespace genannt FX. Das Prefix FX ist trotzdem vor jedem Klassennamen.
-
schrecklich
-
Artchi schrieb:
So, habe mich an das FOX-Tutorial rangemacht. Es werden tatsächlich Makros eingesetzt, die ich gegenüber anderen makroverseuchten GUIs ala wxWidgets ehrlich nicht sichten konnte. Im Prinzip benutzt FOX irgendwie eine merkwürdige Kombination.
Ah ja. Genau,
FXDEFMAP(FXGLViewer) FXGLViewerMap[]={ FXMAPFUNC(SEL_PAINT,0,FXGLViewer::onPaint), .... FXMAPFUNCS(SEL_UPDATE,MINKEY,MAXKEY,FXGLViewer::onUpdAll), };
hat in der Tat (mindestens) ein Makro weniger als
BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU (wxID_EXIT, MyFrame::OnExit) EVT_MENU (DO_TEST, MyFrame::DoTest) EVT_SIZE ( MyFrame::OnSize) EVT_BUTTON (BUTTON1, MyFrame::OnButton1) END_EVENT_TABLE()
Und diese elegante Mischung aus Makros und einem ordentlichem Array ist auch sehr intuitiv und geschmeidig.
Im Vergleich dazu der Ansatz mittels libsigc++ der gtkmm wohl kaum noch diskussionswürdig...Artchi schrieb:
Enums und Objekte werden für Messages und Events hin und her geschickt, was ich für i.O. halte.
Volle Zustimmung, die Message-IDs und Event-Objekte der FOX Message Map sind den Message-IDs und Event-Objekten der wxWidgets Message Map haushoch überlegen.
Artchi schrieb:
Auf der anderen Seite wird für widerkehrende Aufgaben Makros benutzt:
The macro FXDECLARE(ScribbleWindow) declares a number of member functions which every object derived from FXObject should have; we've used a macro as it is always the same, and more convenient to program this way.
Sehe ich genauso. FXDECLARE ist viel kürzer und deutlicher und angenehmer zu schreiben als DECLARE_CLASS; gleiches gilt natürlich für FXIMPLEMENT und IMPLEMENT_CLASS, also schon zwei Vorteile.
Artchi schrieb:
FOX benutzt auch einen Namespace genannt FX. Das Prefix FX ist trotzdem vor jedem Klassennamen.
Ja, das macht Sinn. Wobei ich denke dass "der Windowsler" an sich ein CFX oder evtl. C_FX Präfix bevorzugen würde, da ist also noch Spielraum für Verbesserung.
(NB: Sarkasmusfreie Textpassagen gehören mir allein, der Rest steht, aus Mentalitätsgründen, unter der GNU Free Documentation License der Allgemeinheit zur Verfügung
)
-
Volle Zustimmung, die Message-IDs und Event-Objekte der FOX Message Map sind den Message-IDs und Event-Objekten der wxWidgets Message Map haushoch überlegen.
Sarkasmus oder Standart?
-
cd9000 schrieb:
Walli schrieb:
namespace schrieb:
Von namespaces hat das Fox-Toolkit wohl auch noch nix gehört...
Trifft aber auf alle mir bekannten GUI-Libs zu.
gtkmm verwendet jedenfalls namespace anstelle Prefixes.
Die ist mir ja auch nicht bekannt