Gibt es gute Alternativen zur MFC, oder sollte man lieber direkt bei WinAPI bleiben? Sprache: C++



  • Beefi schrieb:

    Es ist hier sehr schwer den Fehler zu finden, da er nicht wirklich im eigenen Code ist, sondern im "Zwischencode" den der MOC "falsch" umgesetzt hat.

    Das passiert nicht. Vielleicht kommen diese "Erfahrungsberichte" von Leuten, die es das letzte mal mit einer pre-alpha von Qt 0.1 ausprobiert haben. Es ist ein ausgereiftes Framework, das von großen Firmen für große Projekte verwendet wird.

    Beefi schrieb:

    Z.B. schnell und einfach ans Ziel zu kommen

    Nicht unbedingt und nicht unbedingt nur das. Oft ist auch wichtig, wie gut der Code wartbar und erweiterbar ist. Unsere Software wird seit mittlerweile 20 Jahren entwickelt, da ist "schnell ans Ziel kommen" gar nicht mal mehr so wahnsinnig wichtig. Aber wir haben auch recht viel GUI und die ist vielfältig und komplex und muss in verschiedenen Umgebungen funktionieren, z.B. als Plugin in einem CAD System. Du kannst dir nicht vorstellen, was für Probleme wir im Laufe der Zeit schon alles hatten. Und die GUI wird immer komplexer, es kommen immer mehr Anforderungen, weil man immer mehr Daten darstellen und verknüpfen muss, aber ohne dass es langsamer wird oder die Eingaben zu komplex werden. Da sind wir mit unserem letzten Framework gegen die Wand gefahren, mit Qt sind wir recht zufrieden.

    Ja, die Qt ist recht groß und braucht ein bisschen zum Laden... Spielt bei der größerer unserer Software überhaupt keine Rolle mehr 😉 Aber wenn du nur was kleines schreiben willst und keine besondere Features brauchst, spricht auch nichts dagegen, ein kleines leichtgewichtiges Framework zu nehmen. Ich versuche dir nicht die Qt anzudrehen, ich will dir nur die ganzen Vorurteile ausreden.



  • Ich mag bei Qt die signals & slots, wie ist es denn bei U++?



  • Das passiert nicht. Vielleicht kommen diese "Erfahrungsberichte" von Leuten, die es das letzte mal mit einer pre-alpha von Qt 0.1 ausprobiert haben.

    Ja, so wird's wohl sein. Dachte auch, dass es vielleicht Leute sind, die so fest von ihrem Framework besessen sind, nichts anderes mehr (und vor allem Qt) zu akzeptieren 🙂
    Ich denke Qt wäre nicht so beliebt, wenn es hier dauernd Probleme gäbe.

    Oft ist auch wichtig, wie gut der Code wartbar und erweiterbar ist.

    Ah da fällt mir jetzt noch ein Gerücht ein 😃 Ich hab auch schon ein paar mal gelesen, wie sich Leute beschwerten, dass Qt nicht für größere Projekte geeignet sei, da es sehr unübersichtlich und nicht mehr zu warten wird. Und eher für kleine bis mittelgroße Dinge brauchbar ist...vielleicht begründeten sie es noch mit der Geschwindigkeit, ich weiß es nicht mehr. Ich konnte aber nie verstehen warum...Qt ist doch so simpel, dann müsste es ja erst recht für große Projekte gut sein, weil man besser den Überblick behält 😃

    @Hi:

    Ich mag bei Qt die signals & slots, wie ist es denn bei U++?

    Ich bin noch eher am erforschen der Features des Frameworks, was es so kann und wie es das kann. Aber so wie ich das sehe, werden Callbacks verwendet. Ist aber auch sehr simpel...das ganze Framework scheint so easy wie Visual Basic zu sein 😃 Es gibt auch Code-Vergleiche, wo man die gleichen Projekte mit verschiedenen Frameworks umsetzte. Hier hat Ultimate++ nur etwa ein drittel des Codes wie bei Qt. Und man sieht auch sofort am Code, dass Ultimate++ nochmal um einiges leichter ist, als sogar Qt...nach meinem Empfinden.

    Hier ein Code-Vegleich:
    [http://www.ultimatepp.org/wwwuppwebuppwebvsqtenus.html](http://www.ultimatepp.org/wwwen-us.html](http://www.ultimatepp.org/wwwuppwebvsqtvsqten-us.html)

    Hier ein Abschnitt aus der Dokumentation, wie simpel man GUIs erstellt:
    [http://www.ultimatepp.org/srcdocCtrlLibCtrlLibTutorialenus.html](http://www.ultimatepp.org/srcdocen-us.html](http://www.ultimatepp.org/srcdocCtrlLibTutorialTutorialen-us.html)
    Im Punkt 2 sieht man, wie simpel man ein Fenster erstellt...man deklariert es einfach wie eine Variable und schon ist es da.
    Im Punkt 3 sieht man, wie man dann noch die benutzerdefinierte Größe festlegen kann.
    Usw usw...
    Ich muss ehrlich sagen, dass ich mich bei den ganzen Frameworks noch nicht so intensiv mit dem Code beschäftigt habe, sondern eher die Features. Aber für mich ist das Visual Basic pur 😃 Ich kann mir nicht vorstellen, wie man es noch einfacher machen kann. Wie es bei Qt umgesetzt ist, weiß ich noch nicht.
    Natürlich kann man das ganze auch mit dem integrierten GUI Designer machen, Bild/Icon-Editor und solche Sachen sind auch mit in der IDE.

    Was mich grad etwas beschäftigt, ist das Design der GUI...da steckt was ganz interessantes dahinter. Es ist ja ein Crossplattform-Framework...aber ich konnte noch nicht herausfinden, was es unter Linux benutzt (zb GTK oder Qt ?).
    Nun hab ich mal auf meinem sowieso unbenutzten Netbook Linux installiert (XFCE). Die IDE und auch die mit Ultimate++ erstellten Programme, haben hier exakt das GTK Design. Ändert man allgemein das GTK-Design in XFCE, so wird es auch in den U++ Programmen direkt mit verändert.
    Sprich: es verhält sich wie GTK.
    Fakt: Es ist aber kein GTK. Es braucht auch keine GTK oder Qt Libs, sondern nur X11-Libs.
    Um es genau zu wissen, wird jetzt dann KDE installiert, ob hier die Programme auch wie alle anderen Qt Programme aussehen 😃

    Ich sagte zwar anfangs, dass ich nur was für Windows suche, aber das hat mich jetzt schon interessiert. Angeblich soll das unter Mac OSX auch so sein.
    Diese "Style-Engine" nennt sich bei Ultimate++ Chameleon und laut Doku/Forum sollen die Programme immer nativ dem entsprechendem System aussehen.
    Man kann das Design aber auch von "Host Platform" auf andere ändern.
    Auch der schon angesprochene OfficeXP/Office2003 Look ist unter Linux möglich. Aber nicht etwa so wie manche Windows-Themes von GTK/Qt, sondern es sieht EXAKT wie ein Windows Programm aus.
    Ich frage mich, wie die das machen...vor allem ist das ganze auch noch wirklich flott. Die alte Netbook-Kiste mit Atom-Prozessor ist sehr pingelich, aber die U++ Programme flitzen wie als wäre Windows 95 drauf 😃
    Allein die IDE (welche schon sehr komplex ist) startet so schnell, dass man sagen könnte, dass hier wirklich nur noch die Festplatte begrenzt. Die IDE startet hier auch nicht langsamer, als auf meinem modernen i5-Notebook.

    So jetzt Schluss mit der Schwärmerei 🙂

    EDIT:
    So kurzer Nachtrag...
    Also auch unter Kubuntu, hat es den exakten Qt-Stil. Wenn man ein Programm schreibt, muss man es also nur für Linux kompilieren und fertig. Es hat immer den exakten Stil wie das Betriebssystem und verhält sich auch so. Auch wenn man im Betrieb das Theme des Systems ändert.
    Da man mit der Ultimate++ Lizenz auch kommerziell statisch linken darf (BSD-Lizenz), ist das voreingestellt. Im Framework ist auch alles enthalten was man braucht (Netzwerk, OpenGL, und und und). Man kompiliert also eine einzige ausführbare Datei und kann diese verteilen. Keine Umwege mit "./configure, make, make install" oder irgendwelchen Paketen. Nur Datei anklicken, und egal unter welcher Oberfläche, es läuft und man kann absolut nicht erkennen, ob es mit GTK oder Qt geschrieben ist, weil es das auch nicht ist, aber trotzdem irgendwie so scheint 🙂
    Es sei betont, dass man hier auch nichts zur Kompilierzeit beachten muss, welche "Ziel-Oberfläche" das Programm haben soll. Man kann die gleiche ausführbare Datei sowohl unter Gnome, XFCE, KDE, usw ausführen und es sieht immer aus wie das System selbst und ändert sich auch beim Theme-Wechsel mit. Ich habe aber keine Ahnung, wie die das machen.
    Auch die Windows/Office Styles können zur Laufzeit geändert werden und man muss nichts beim Kompilieren beachten.

    Ich habe auch noch einen Foren-Eintrag gefunden, dass es tatsächlich alles direkt auf X11 basiert. Man kann aber seit neuestem direkt für GTK-Kompilieren, wie GTKmm (wenn ich das richtig verstanden habe). Muss man aber nicht.
    Hier der Link: http://www.ultimatepp.org/forum/index.php?t=msg&goto=38663&

    Bitte korrigiert mich, falls ich mich bei etwas vertan habe. Vor allem bei der Lizenz. Ist es korrekt, dass man mit der BSD Lizenz statisch linken darf und das Produkt auch kommerziell vertreiben darf?



  • Falls es jemanden interessiert, wie das ganze aussieht, habe ich mal ein paar Beispielprogramme kompiliert.
    Es handelt sich jeweils um eine Datei, die direkt ausführbar sein sollte, also keine weiteren Linux-Pakete, Librarys, oder sonst was.

    Es ist eine ZIP-Datei in der drei Ordner sind:
    Windows: Kompiliert unter Windows 7 x64 (sollte aber ein 32-Bit Programm sein)
    Linux_x32: Kompiliert unter Lubuntu 13.04 32-Bit Live-CD
    Linux_x64: Kompiliert unter Lubuntu 12.04 64-Bit Live-CD

    Bei den Linux-Versionen muss man eventuell noch mit Rechtsklick drauf -> Eigenschaften und Datei ausführbar machen.
    Oder eben das ganze entsprechend in der Konsole.

    Ich wusste nicht wie/ob man hier Dateien hochladen kann, deshalb ein FileHoster...wenn man auf den Link klickt, erscheinen mehrere Download-Buttons. Der unauffälligste führt zum Ziel 😃

    Die Programme wurden nicht von mir verändert, es sind die originalen, die mit der IDE ausgeliefert werden. Einfach nur geöffnet und kompilert. Wenn man die IDE installiert, gibt es noch sehr viel weitere Beispiele.

    Das Programm "AddressBook" ist das Qt-Vergleichsprogramm, welches auch in einem Link zu Ultimate++ in einem meiner vorherigen Posts gezeigt wird. Die Qt-Variante kann man im QtCreator laden und kompilieren.

    Download: http://www.file-upload.net/download-7748422/Upp-Tests.zip.html



  • Was mir noch einfällt: Beefi muss mit 😉

    Beefi schrieb:

    Ich hab auch schon ein paar mal gelesen, wie sich Leute beschwerten, dass Qt nicht für größere Projekte geeignet sei, da es sehr unübersichtlich und nicht mehr zu warten wird.

    Man stößt durchaus auch bei Qt an die Grenzen des Frameworks, so ist es nicht. Aber z.B. Maya verwendet Qt für die GUI und wieviel umfangreicher kann ein Projekt schon werden?
    Dass es unübersichtlich ist, kann ich nicht bestätigen. Allein durch das in die Sprache mit eingebaute MVC Konzept mit den Modellen für die GUI erzwingt es schon mehr oder weniger einen halbwegs sauberen Stil. Und es ist alles recht gut gekapselt. Kein Vergleich zu Frameworks ala MFC, wobei MFC sogar auch schon sowas wie MVC hatte mit den Document/View Klassen.
    Wartbar ist es auch... Wir haben schon einiges in Qt selber umgebaut/erweitert/angepasst, weil man wie gesagt auch damit an die Grenzen stößt.

    Ich hab diesen Vergleich zwischen Qt und Ultimate++ angeschaut und seh ehrlich gesagt nicht, warum der Code bei Ultimate++ kürzer ist. Was mir auffällt ist, dass der Qt Code verdächtig nach Qt 3 ausschaut. Ich habs mir nicht genau angeschaut, aber ich seh keinen Grund, warum der Qt Code länger sein sollte. Wahrscheinlich ist der Vergleich nicht ganz fair.



  • Wenn man sich den Qt source ansieht, vergehts einem aber auch gewaltig 👎
    Ist das bei allen größeren open source Projekten so? Einfach nur noch schwerstes Gefrickel...



  • Ich weiß nicht, was du hast 😉 Es ist bei allen Open Source Projekten, die ich gesehen habe, wesentlich schlimmer. Qt ist jetzt nicht übertrieben schön oder elegant, aber es ist sauber und konsistent. Alle größeren Open Source Projekte, die ich gesehen habe, sind im Vergleich dazu echt übel.



  • Was mir auffällt ist, dass der Qt Code verdächtig nach Qt 3 ausschaut. Ich habs mir nicht genau angeschaut, aber ich seh keinen Grund, warum der Qt Code länger sein sollte. Wahrscheinlich ist der Vergleich nicht ganz fair.

    Ja das mit Qt3 kann sogar sein...die Beispiele haben auch noch Windows XP Oberfläche. Wobei Windows XP ja noch nicht ganz tot ist 🙂
    Wenn man sich den Vergleich ansieht, haben sie es unten auch nochmal etwas geändert, um es fairer Qt gegenüber zu machen. Aber ich kann damit eh nicht viel anfangen, weil ich Qt ja nicht kenne.

    Was mir jedoch sofort an den Ultimate++ Codebeispielen auffiel, es ist bei weitem nicht so kompliziert wie wxWidgets und GTKmm 🙂 Auf den ersten Eindruck zumindest.

    Es ist bei allen Open Source Projekten, die ich gesehen habe, wesentlich schlimmer.

    Ihr meint jetzt den Sourcecode von Qt selbst?
    Hab ich auch schon oft gehört, dass Open Source Projekte im Code meist fürchterlich aussehen. Auch der Linux Kernel soll der größte Saustall sein 😃
    Aber Qt ist ja noch nicht sooo lange Open Source...das stell ich mir noch recht sauber vor 😉



  • Ich hab nochmal drübergeschaut... Bin immer noch zu faul, mich da wirklich reinzudenken, halte den Vergleich aber immer noch nicht für fair 😉 Was soll z.B. diese riesenlange findEntries Methode in der Qt Version, wo sie auf der anderen Seite nur eine paar Zeilen lange Search Methode haben? Das kann man alles so direkt nicht vergleichen, außerdem würde man das so wahrscheinlich eh nie implementieren. In Qt würde man fürs Suchen am ehesten ein Proxy Model verwenden, dann wärs vielleicht eine Zeile, den Suchbegriff zu setzen. Oder man braucht da noch irgendwelche Optionen (nach was genau man sucht), dann würde man vielleicht vom Proxy Model ableiten und eine Methode überschreiben. Wär etwas Boilerplate, aber sauber und wahrscheinlich immer noch kürzer als das was sie da gemacht haben. Und überhaupt würde man die Suche wohl eher auf dem richtigen Datenmodell machen und nicht auf der GUI Zwischenschicht.



  • Hi,

    der Qt-Code ist von den Qt-Entwicklern höchst persönlich 😃
    Das Beispiel ist auch im QtCreator bereits zum testen enthalten.
    Die Ultimate++ Entwickler haben es dann nur mit Ihrem FrameWork realisiert.
    Wenn man auf der Startseite im Creator oben rechts auf Beispiele klickt, müsste es dabei sein.



  • Mag sein, ist aber nicht die beste Implementierung und veraltet. Ist irgendwie schwer, sowas sinnvoll zu vergleichen.
    Worauf ich hinaus will ist, dass ich generell nicht sehr viel Potenziall sehe, dass bei einem GUI Framework deutlich weniger Code rauskommen würde. Die sind sich doch alle zu ähnlich und viel Boilerplate braucht man bei Qt nicht, von dem her wirst du in der Praxis bei beiden Frameworks ähnlich viel Code brauchen. Und wenn du dein Programm sauber aufbaust, wirst du tendenziell etwas mehr Code brauchen.



  • Guten Abend,
    erstmal großen Dank an den Thread Ersteller ich suche schon seit 1 Woche nach so einem Thread.
    Es ist erstaunlich wie ähnlich sich deine Anschauung und Vorgehensweise mit der meinen decken. Auch dein Beruf und dein Hobby. Irgendwie erschreckend, sind wir alle doch nur in einer MATRIX?
    Wie erwähnt habe ich im Grunde den gleichen Weg auf der GUI lib Suche hingelegt, und bin bei Qt und WxWidgets hängen geblieben. Ich verstehe nicht wie du Probleme beim compilieren der WxWidgets Programme gescheitert bist. Ich habe mir Codilite runtergeladen und einfach drauf los compiliert- ohne irgenwas einzustellen.
    Von Ultimate++ habe ich heute zum ersten mal gelesen und ich bin dir dankbar das du es so ausführlich beschrieben hast. Ich werde es mir gleich anschauen - wxWidgets ist zwar sehr nett aber irgendwie sehne ich mich insgeheim nach etwas schlankerem- etwas Kompakterem, und genau das Scheint mir nach deiner Beschreibung Ultimate++ zu sein. Was mich noch interessieren würde ist, wie gut es mit anderen IDEs ausser der ihren zusammenarbeitet. Du hast nur kurz erwähnt das es auch mit VS funktioniert. Gibt es ein AddIn für VS.
    Aufjedenfall danke für deinen Beitrag- das Internet ist inzwischen so voll von Müll das man nur sehr mühsam an echte und brauchbare infos kommt, vor allem als anfänger.
    Gruß.



  • Hi Ghost++,

    bei wxWidgets hatte ich mit CodeBlocks irgendwie Probleme, dass die IDE/Compiler irgendwie nicht alle Bibliotheken richtig gefunden hat. Ich habe sämtliche Tutorials durchgemacht, aber es gab beim Kompilieren trotzdem immer Fehlermeldungen...obwohl der Vorgang eigentlich sehr simpel ist und nicht anders als bei anderen Bibliotheken. Das war bestimmt nur ein kleiner Fehler, den ich irgendwo übersehen hatte.
    Was wxWidgets betrifft habe ich für mich jedoch folgende Alternative gefunden...
    Unter Windows: Win32++
    Unter Linux: GTKmm
    Win32++ ist absolut easy zu lernen und macht dir ein kleines flottes Programm. Es ist quasi wie direkte Win32API-Programmierung, jedoch wie die MFC gekapselt...Nur eben kostenlos und viel einfacher.
    GTKmm ist die C++-Variante von GTK+ und fast schon Standard auf Linux. Und sehr flott (auch bei leistungsschwachen Geräten). Wenn man auf der Spielwiese Linux mitmischen will, ist das eine gute Wahl, weil vieles mit dem Toolkit geschrieben ist...kannst also Programme für eigenen Zweck umschreiben usw.

    Diese beiden Lösungen sind jetzt eher nur für die GUI (wobei Win32++ noch mehr zu bieten hat, Netzwerk usw.). Klar denken sich viele, dass man das mit Qt auch abdecken kann, aber Qt trifft einfach nicht meinen persönlichen Geschmack. Das sind mehrere Faktoren...diese hunderte von MB die man immer installieren muss, die geringere Performance im Vergleich zu Win32++ oder GTK, MOC, große Bibliotheken, Bibliotheken nicht statisch linkbar, usw.
    Und ich brauche zu den beiden oben genannten Bibliotheken kaum was. Is ja schon fast alles in der Standardlibrary drin...und für ein paar andere Kleinigkeiten kann man ja ne andere Bibliothek suchen, zB Boost für Netzwerk usw. Das ganze kann/darf man dann oft auch noch statisch reinlinken.

    Ja und Ultimate++ ist hier eben (für mich) die eierlegende Wollmichsau. Wenn man sich ansieht, was hier alles im Toolkit enthalten ist, vermisst wohl kaum jemand etwas. Es ist alles absolut frei und auch noch kommerziell nutzbar...und eben statisch linkbar. Ultimate++ ist eigentlich sogar eher zum statisch linken gedacht...man kann aber auch dynamisch linken.
    Und was hier genial ist: Du musst am Code wirklich GAR NICHTS ändern, wenn du das gleiche Programm für Linux und Windows kompilieren willst. Bei wxWidgets ließt man oft von frickeleien...und von Qt auch manchmal. Diese Beispielprogramme, die ich hier im Thread angehängt habe, laufen auf jeder Linux-Kiste. Selbst wenn du nur Xorg installiert hast und sonst nichts. Und es ist auch kein Problem, diese Programme ohne Anpassungen auf meinen Raspberry zu spielen 🙂
    Du hast mich nach anderen IDEs in Zusammenhang mit dieser Bibliothek gefragt...es geht...ich habe es mit CodeBlocks und VS2012 Express probiert. Man hat aber mehr Vorteile, wenn man die IDE von denen verwendet (hier sind echt gute Techniken eingebaut, vor allem in Kombination mit der Library).

    Für mich ist/war CodeBlocks immer die beste IDE. Ich installiere mir Visual Studio nur, wenn ich wirklich abhängig von C#/VB.NET bin. Ein was stört mich nur an CodeBlocks und zwar ist das beim Debuggen der Inhalt der Variablen. Die muss man extra immer mit diesem Watch-Fenster angeben...und wenn man das macht, tauchen manchmal aus heiterem Himmel Programm-Fehler auf (Segmentation Fault) die man nur lösen kann, indem man den Wert der Variablen nicht mehr kontrolliert (absoluter Schwachsinn und nicht Sinn beim Debuggen). Ich hab schon etliche Zeit mit der Suche nach irgendwelchen Code-Fehlern verbracht, wo ich wohl welchen Fehler gemacht hab...obwohl der Fehler nur vom Debuggen entstand.
    TheIDE (IDE von Ultimate++) hat ein neues Debugger-Interface...echt hammer gemacht (gefällt mir besser als bei Visual Studio). Hier kann man zB auch ganz locker mit dem Mauszeiger über ne Variable fahren und der Wert wird angezeigt.
    Die Code-Vervollständigung ist bei TheIDE nur "noch" nicht ganz so toll, wie bei CodeBlocks. Es ist sehr schwer, sich zwischen den beiden zu entscheiden. Beide IDEs sind wirklich verdammt gut. Aber Visual Studio fliegt wieder von meinem PC...ich brauche diese ewigen Softwarepakete nicht alle, nur um ein einfaches C++ Programm zu schreiben. Hatte es nur für schnelle GUI-Programmierung in VB.NET genutzt. Ich will eh immer nen schnellen PC, aber nach Visual Studio Installation, bootet der Rechner dreimal so lange 😃

    Dann kann ich dir noch folgenden Tip geben (da wird es aber auch verschiedene Meinungen geben). Wenn du ab und zu unter Linux programmierst, dann bleib auch bei Windows beim GNU GCC (also MinGW). Ich habe auch erst unter Windows mit VS gearbeitet und unter Linux mit GNU GCC. Die Compiler sind aber unterschiedlich...der eine meckert, wo es der andere nicht macht...und umgekehrt. Man muss sich auf seinen Compiler einfach einleben. Wenn ich die einfachsten Konsolenprogramme unter Visual Studio kompilieren will, steht oft erstmal ne neue Fehlersuche an...obwohl unter MinGW alles bestens war 😃
    Das liegt aber manchmal auch nur an Einstellungen.



  • Ja und Ultimate++ ist hier eben (für mich) die eierlegende Wollmichsau. Wenn man sich ansieht, was hier alles im Toolkit enthalten ist, vermisst wohl kaum jemand etwas.

    Genau das ist das Problem. Ich will beispielsweise keine Threads, da die Standardbibliothek von C++11 das viel besser handhabt.



  • Das kapier ich nicht so ganz. Was meinst du genau?


Anmelden zum Antworten