Probleme mit wxWidgets u. Bester GUI-Designer für Code::Blocks



  • Hallo,

    ich möchte GUIs für Windows 7 mit C::B erstellen. Wichtig ist mir, das die GUI sich nicht von anderen Windows 7 GUIs unterscheidet. Deshalb scheint Qt schonmal nicht das richtige für mich zu sein. Gibt es noch andere GUI-Designer außer Qt, GTK+ und wxWidgets, die zu empfehlen sind? Was wäre für mich besser geeignet? Ich habe mich heute fast den ganzen Tag mit wxWidgets herumgeschlagen. Ich bekomme es einfach nicht zum laufen. Hier, wie ich vorgehe:

    1. Lade mir von http://www.wxwidgets.org/downloads/ unter Current Stable Release->Source Archives "wxAll" herunter.
    2. Entpacke das Archiv ins Root von C.
    4. Öffne die cmd und wechsle in den Ordner C:\wxWidgets-2.8.12\build\msw.
    5. Zuerst mache ich mit mingw32-make.exe -f makefile.gcc USE_XRC=1 SHARED=1 MONOLITHIC=1 BUILD=release UNICODE=1 clean sauber (MinGW ist installiert und in der Path-Variablen ist C:\MinGW\bin gesetzt).
    6. Dann kompiliere ich mit mingw32-make.exe -f makefile.gcc USE_XRC=1 SHARED=1 MONOLITHIC=1 BUILD=release UNICODE=1.
    7. Danach öffne ich C::B und wähle File->New->Project->wxWidgets project
    8. Nun wähle ich wxWidgets 2.8.x, wähle Projektname und Pfad, klicke bei Author einfach auf Next und wähle bei Preferred GUI Builder auf wxSmith und bei Application Type auf Frame Based.
    9. Wenn ich nun wxWidgets Pfad angeben soll, öffnet sich ein weiteres Fenster "Global Variable Editor". Bei base gebe ich wxWidgets Pfad an (C:\wxWidgets-2.8.12) und klicke auf Close. Dann gebe ich im eigentlichen Wizard nochmal wxWidgets Pfad an und klicke Next.
    10. Anschließend wähle ich den GNU GCC Compiler aus, wähle nur Release Build und klicke auf Next. Auf der vorletzten Seite klicke ich dann "Use wxWidgets DLL", "wxWidgets is built as a monolithic library", "Enable unicode" und "Create Empty Project" an.
    11. Wenn ich nun auf Next klicke erscheint eine Meldung: "A matching Release configuration cannot be found in the wxWidgets directory your specified. This means that Release target of your project will not build. Are you sure you want to continue with these settings?". Ich klicke auf "Ja". Anschließend kommt noch "Please select additional libraries you want to add to project." Ich wähle keine aus und klicke einfach auf Finish.
    12. Wenn ich nun Kompilieren möchte sagt C::B mir "C:\wxWidgets-2.8.12\include\wx\platform.h|196|fatal error: wx/setup.h: No such file or directory|". Tatsächlich gibt es die setup.h nicht in dem Verzeichnis. Es gibt aber eine setup.h unter "C:\wxWidgets-2.8.12\include\wx\msw" und unter "C:\wxWidgets-2.8.12\include\wx\msw\wince", sowie unter "C:\wxWidgets-2.8.12\include\wx\univ".

    Wo liegt mein Fehler?

    Mit freundlichen Grüßen,
    DarkBug

    EDIT: Wenn ich C::B öffne, gibt es unter File->New->Project noch die Option "Win32 GUI project". Was ist das für eine GUI? Scheint kein Designer dabei zu sein. Ich kann nur Code eintippen.



  • Hast du schon das Qt-SDK ausprobiert? Der Qt-Creator ist eine gute IDE und der integrierte GUI-Designer gehört zu den besten unter C++.

    Ab Qt4 und WinXP wird von Qt die Windows-eigene Zeichen-Engine zum zeichnen der Controls genutzt. Es sieht also wie eine native Anwendung aus.



  • Benutz den wxFormBuilder. Der ist so das beste kostenfreie Tool für wxWidgets. Kann C++ oder PythonCode erzeugen oder auch das wxRC Format.

    Win32 GUI Project ist halt die native WinAPI.



  • Wenn deine Programme nur unter Win7 laufen sollen und sich optimal ins System integrieren sollten, dann nimm das aktuellste .NET/C#.

    Andere Frameworks werden sich immer (minimal) unterscheiden.

    Wir (Team mit 10 Leuten) benützen in der Firma Qt mit QtCreator oder Visual Studio, leben mit den für uns unbedeutenden Unterschieden, und sind total zufrieden damit.



  • @All: Vielen Dank für eure Antworten. Hauptsächlich möchte ich native Windows 7 GUIs bauen. Hin und wieder möchte ich mir aber auch GUIs zeichnen, auf denen ich z.B. in Photoshop selbstentworfene Bedienelemente wie "Schließen" oder "Minimieren" draufbauen kann. Gibt es einen Designer mit dem man beides machen kann? Mit der WinAPI ist das nicht möglich oder? Btw, gibt es eigentlich einen WinAPI-Designer, oder kann man die WinAPI-Fenster wirklich nur durch coden bauen?

    Wo liegt denn mein Problem bei der Installation von wxWidgets?

    @Softwaremaker: Das Qt-SDK habe ich nicht ausprobiert, weil ich bisher gedacht habe, das man damit keine nativen Windows 7 Fenster zeichnen kann. Der Nachteil bei Qt wäre aber auch, das man soweit ich weiß nicht statisch linken darf und somit sogar bei kleinen Programmen ne Menge dlls mitgeben muss, oder?. Ich möchte eigentlich schon bei C::B bleiben. Oder wäre der Qt-Creator einem C::B mit Qt-SDK vorzuziehen?

    @Scorcher24: Wieso ziehst du wxFormBuilder dem wxSmith vor?



  • Weil ich Visual C++ 2008 Prof. verwende. Und ich verwende die wxRC Dateien und keinen generierten Code, das ist besser.
    Zu deinem Problem nochmal:

    Verwende bitte wxWidgets 2.9. Der 2.8 build ist scheisse. Ausserdem sind die strings in 2.9.x viel besser, da es die Unterscheidung Unicode -> non Unicode nicht mehr gibt. Sondern es wird intern immer utf8 verwendet was auf der Platform nativ ist. Man kann aber trotzdem auch mit char-strings arbeiten.

    Dann die setup.h:
    Die findet sich in "wxWidgets-x.x.x\lib\compiler_buildtyp\platformname_ud" also als Beispiel: "C:\wxWidgets-2.9.2\lib\vc_dll\mswud"
    Den Pfad musste includen.
    Aber wie gesagt: Nutze 2.9.2, das ist aktueller. Die 2.8 ist bestimmt 4 Jahre alt^^. Auserdem kann das neuere auch nativ die STL verwenden.



  • Nach jahrelangem MFC fing ich mit wx an und fand es auch ganz ok. Was mich aber gestört hat war, das es keine IDE mit integriertem guten GUI-Editor gibt.
    Habe wxFormbuilder und VisualStudio benutzt, da der wxFormbuilder am umfangreichsten war. Er kann leider nur Layouts und keine manuelle Positionierung von Controls, was bei einen GUI-Entwurf (Konzeption) stört.

    Seit Qt 4.5 gibts die LGPL und der Qt-Creator wurde veröffentlicht. Seit dem bin ich von wx weg und nutze Qt mit dem Qt-Creator und bin voll zufrieden.
    Wenn man keine kommerzielle Lizenz hat (sehr teuer) kann man zwar nur dynamisch linken und muss relativ große Qt-DLLs mit ausliefern, hält sich aber im Rahmen (Programm+DLLs gepackt ca. 6 MB).



  • Softwaremaker schrieb:

    Nach jahrelangem MFC fing ich mit wx an und fand es auch ganz ok. Was mich aber gestört hat war, das es keine IDE mit integriertem guten GUI-Editor gibt.
    Habe wxFormbuilder und VisualStudio benutzt, da der wxFormbuilder am umfangreichsten war. Er kann leider nur Layouts und keine manuelle Positionierung von Controls, was bei einen GUI-Entwurf (Konzeption) stört.

    Seit Qt 4.5 gibts die LGPL und der Qt-Creator wurde veröffentlicht. Seit dem bin ich von wx weg und nutze Qt mit dem Qt-Creator und bin voll zufrieden.
    Wenn man keine kommerzielle Lizenz hat (sehr teuer) kann man zwar nur dynamisch linken und muss relativ große Qt-DLLs mit ausliefern, hält sich aber im Rahmen (Programm+DLLs gepackt ca. 6 MB).

    Ihr immer mit eurem QT. Die Layouts sind erforderlich bei wxWidgets. Manuelle Positionierung ist nicht empfohlen.
    Genauso wie QT nen metacompiler nötig ist. Das empfinde ich als viel störender als alles andere.



  • Die Layouts sind erforderlich bei wxWidgets. Manuelle Positionierung ist nicht empfohlen.

    Man kann in wx auch manuell Positionieren (der Controls-Konstruktor hat ja ein wxPoint defaultPosition) nur unterstützt das kein wx-GUI-Editor.
    In Qt platziere ich erst die Controls manuell (Konzeption), kann das Programm starten/testen und dann erst die Layouts realisieren (Controls markieren und Layouter wählen).
    Den MOC merkt man nicht und ich hatte damit noch keine Probleme.
    wx ist gut, aber Qt ist einfach noch besser. 😉



  • Softwaremaker schrieb:

    Die Layouts sind erforderlich bei wxWidgets. Manuelle Positionierung ist nicht empfohlen.

    Man kann in wx auch manuell Positionieren (der Controls-Konstruktor hat ja ein wxPoint defaultPosition) nur unterstützt das kein wx-GUI-Editor.
    In Qt platziere ich erst die Controls manuell (Konzeption), kann das Programm starten/testen und dann erst die Layouts realisieren (Controls markieren und Layouter wählen).
    Den MOC merkt man nicht und ich hatte damit noch keine Probleme.
    wx ist gut, aber Qt ist einfach noch besser. 😉

    Ich hab nicht gesagt dass es nicht geht. Ich sagte, es ist nicht empfohlen. Deswegen unterstützen es auch die Editoren nicht. Ausserdem ist es schlechtes Design.
    Wenn man sich auf feste Positionierung und Größen festlegt, legt man sich auch im ernstfall auf eine bestimmte Sprache fest oder hat nachher ein Problem wenns um mehrsprache Applikationen geht. Dann fetzt dir nämlich dein Layout auseinander.

    Aber mach du ruhig mit Qt, aber dieses wehemente "wäääh QT is viel besser" geht langsam Richtung Sekte. QT ist schlechtes C++. Mehr nicht.



  • Du hast vollkommen recht und ich wollte dir in dem Punkt nicht wiedersprechen, Layouts sollte man auf jeden Fall nutzen, besonders bei Localization und größenveränderbaren Fenstern. Bei MFC war das einfach nur blöd (nur manuelle Positionierung, schwere Localization mittels Resource-DLLs).
    Aber beim Entwurf eines GUIs ist manuelle Positionierung erstmal hilfreich, bei Layouts muss man zu Beginn schon das GUI-Konzept haben (kann ForeUI www.foreui.com zur Konzeption sehr empfehlen).

    Die wxWidgets-Leute machen eine gute Arbeit, die Bibliothek ist ausgereift (nur die Deklaration von Containern gefällt mir nicht) und der Umstieg von MFC auf wx war sehr einfach (Qt fand ich damals garnicht gut).
    Nur brauche ich auch anpassbare Oberflächen (Farbe der Controls und Fenster ändern) und das geht bei Qt mit StyleSheets super einfach, bei wx ist es aufwendiger bzw. muss man über wxUniv gehen. In vielen Punkten ist Qt mit wx gleich gut, aber Qt hat einfach mehr Entwickler und Geld und das merkt man auch. Aufgrund von LGPL muss man eventuell bei Qt Kompromisse eingehen, ich komme damit klar bzw. werde ich wohl irgenwann eine kommerzielle Lizenz erwerben.



  • Sorry, das ich mich erst jetzt melde, aber ich hatte eine Internetanschlussstörung. Die Version 2.9.2 lässt sich irgendwie nicht kompilieren. Da die mitgegebenen Parameter eh von der config.gcc überschrieben werden, kompiliere ich ohne weitere Parameter. Aber selbst mit den Parametern BUILD, SHARED, MONOLITHIC und UNICODE lässt sich wx nicht kompilieren. Ich erhalte immer folgenden Fehler:

    http://www8.pic-upload.de/21.07.11/mg6qlo9ye8jc.png

    Ich hoffe ihr könnt mir weiterhelfen.

    P.S.: Überall wird immer nur über Qt oder wxWidgets geredet. Warum wird GTK+ nie erwähnt?


Anmelden zum Antworten