• Hi, habe gerade etwas tolles gefunden, Qt hat es einfach drauf, das ist nur ein 3D-Beispiel!
    http://labs.trolltech.com/blogs/2008/12/…nsion-wolfenqt/
    Wenn ihr es selbst ausprobieren wollt, so wie ich, braucht ihr einen Compiler, bei Linux immer da, und eine Qt installation:
    http://labs.trolltech.com/gitweb?p=Wolfe…414e765b;sf=tgz
    Archiv entpacken, qmake ausführen. Normalerweise dann make ausführen und dann das Programm starten, unter Mac die XCode-Projektdatei öffnen und damit erstellen.
    Übrigens gibt es eine Stelle, wo man das "Gebäude" verlassen kann, die Widgets an den Außenwänden kann man aber auch von da bedienen, nur ist dann die Steuerung andersherum, vor allem sind die vertauschten Tasten lustig, wenn man die Szene virtuell erneut betritt.

    Es zeigt übrigens nicht nur die Fähigkeiten der 3D-Integration, sondern noch einiges anderes: QtScript (zur Steuerung des Soldaten), Phonon (Videoplayer), GraphicsView (überhaupt zum Platzieren und Bewegen)...
    Wichtig ist für die Widgets die Klasse QTransform, die Daten für die perspektivische Verzerrung enthält. Wenn man die immer anpasst beim Bewegen und setTransformation aufruft, hat man wunderbare Widgets in 3D. :)
    Viele liebe Grüße
    The User

  • Wenn du mal über den Tellerrand schauen möchtest, dann schau dir bei Gelegenheit WPF an, das ist auch eine feine Sache. Komplette Integration von 3D, Interface, Grafik, Video...
    Da kannst du dann Videos und DirectX-Inhalte auf Oberflächen projizieren oder, seit Version 3.5, auch 2D-Interfaces, die noch dazu voll funktional bleiben. Das heißt keinerlei Picking notwendig, das macht alles WPF für dich.
    Also andere Plattformen, die das können, gibt es auch ;).

    Interessant wird dann wohl eher die Performance.

  • Ich schau mir durchaus andere Sachen an, bin allerdings mittlerweile mit Qt sehr vertraut und weiß den Komfort zu schätzen. ;)
    Die Gelegenheit werde ich aber "leider" nicht nutzen, da ich plattformunabhängige Software ohne unfreie Abhängigkeiten schreiben (und benutzen) möchte. Gut es gibt Mono, aber das unterstützt sicher kein WPF.
    Lieber Qt:
    -absolut plattformunabhängig
    -Frei
    -extrem komfortabel
    -kein .NET (=>intelligentes Speichermanagement, hohe Effizienz)
    -OpenGL-Optimierung statt DirectX
    -Innovative Code-Creator - neben den XML-Files für die GUI, was ja fast schon Standard ist, außer dass man sie zur Laufzeit laden kann, z. B. moc, QLALR, qmake...

    Gibt natürlich noch andere Sachen, aber GTK-- und wxWidgets gefallen mir nicht so und viel ist eher ein Witz, der kaum an die Kraft von Qt heranreicht.


  • Die Gelegenheit werde ich aber "leider" nicht nutzen, da ich plattformunabhängige Software ohne unfreie Abhängigkeiten schreiben (und benutzen) möchte. Gut es gibt Mono, aber das unterstützt sicher kein WPF.


    Den vollen Umfang unterstützt es in der Tat nicht, sondern nur den durch Silverlight (Moonlight unter Linux) implementierten.

    Zu freier Software nehme ich hier keine Stellung, das ist Ansichtssache.


    -extrem komfortabel


    Jup, isses.


    -kein .NET (=>intelligentes Speichermanagement, hohe Effizienz)


    Das kommt aber auch immer auf die Erfahrung des Programmierers an. Auch in C++ ist es ein leichtes, unperformante Programme zu schreiben.


    -Innovative Code-Creator - neben den XML-Files für die GUI, was ja fast schon Standard ist, außer dass man sie zur Laufzeit laden kann, z. B. moc, QLALR, qmake...


    Cool, also sowas wie XAML?

  • Also Qt ist für einige Programmiersprachen verfügbar. Die eigentliche Version ist eben C++. Dann gibt es Ports vor allem durch das KDE-Projekt für Python, Ruby, PHP, Perl und C#. Die Java-Version ist dagegen sogar offiziell von Qt Software, also garantiert auf dem neusten Stand, und heißt Jambi. Es gibt viele Dinge, die man auch aus Swing kennt, allerdings sind manche Sachen einfacher. Z. B. muss man nicht für alles diese Listener erstellen, meistens reichen die "Signals and Slots" mit denen man einfacher auf Aktionen reagieren kann. Die Namenskonventionen sind übrigens wie in Java und einige Namen sind sogar ähnlich, ich selbst habe es aber noch nicht in Java ausprobiert. Die Java-Version gibt es genauso auf der Qt-Seite. Das (durchaus nette) deutsche QtForum hat auch einen großen Java-Bereich.

    Code-Generatoren:
    Also die wichtigsten sind moc und uic.
    uic ist tatsächlich so etwas wie bei XAML, per GUI (QtDesigner) oder eben per Texteditor kann man solche XML-Dateien erzeugen, die die Daten für die Widgets enthalten. Dabei werden auch benutzerdefinierte Widgets, Layouts, Übersetzungen und einfache Aktionen unterstützt. Kaum ein Programm kann nur damit funktionieren, man bekommt es vielleicht hin, einen Webbrowser mit vor und zurück zu machen, aber für wirkliche Abläufe braucht man Code, ich meine das ist in XAML ähnlich. Das XML wird dann von uic in ganz normalen Code umgewandelt, die Klasse kann man dann verwenden oder von ihr erben.
    moc:
    moc ist dafür da, zusätzliche Features für C++ zu bringen, dann laufen eben Signals and Slots, Objekte können Kindobjekte haben (wenn ein Widget gelöscht wird, kann man in der Regel auch alle Unterwidgets löschen, man braucht nicht die Holzhammermethode Garbage-Collection), man kann Methoden über Strings und IDs ansprechen und QVariant verwenden, allerdings weiß ich nicht, wie das in Java aussieht.
    qmake ist eine Alternative zu automake und cmake, die sehr viel schneller ist und eben guten Qt-Support hat. QLALR ist eine Alternative zu yacc. Leider werden keine Templates unterstützt.
    Plugins:
    Es gibt einige Möglichkeiten zur eventuellen Einbindung von Plugins. Unter Java kann man ja sowieso zur Laufzeit jars einbinden, mit Qt geht das ebenso plattformunabhängig über Interfaces mit C++. Außerdem gibt es eben Scripting-Möglichkeiten, das eingebaute QtScript oder auch vom KDE-Projekt Python, Ruby, JavaScript, PHP oder Perl, muss ich mal ausprobieren, QtScript sieht man schon in dem Link für die Steuerung des Soldaten, habe mal ein wenig rumgespielt, dass der zufällig manchmal abhaut. Aus dem eigentlichen Programm heraus kann man dem Skript eben Objekte zur Verfügung stellen. Wenn es spezielle Nutzeroberflächen geben soll, kann man auch ui-Dateien zur Laufzeit laden.

    Alle Widgets können über verschiedene Mechanismen angepasst werden:
    -QLayout-Objekte, die bekannten Layouts sorgen für die Platzierung, es sind auch eigene Layouts möglich
    -QStyle-Objekte, eine Art Stylesheets für Desktop-Anwendungen. Die Syntax ist an CSS angelehnt.
    -QTransform für Verzerrung, Perspektive und Rotation

    Wenn ich mit Sachen vergleiche, wo ich mich schonmal mit Swing probiert habe, halte ich den Code-Aufwand für sehr gering, es funktioniert eben auch, wenn man sämtliche Layout-, Style-...Deklarationen weglässt. Aufruf von Zeichenmethoden, "Gameloops" oder manuelle Frameraten-Kontrolle sind auch unnötig, es wird sehr zuverlässig dann gezeichnet, wenn sich was bewegt oder verschoben hat, Flimmern wurde nie beobachtet.

    Zur Zeit steht Qt unter der GPL - ohne Linking Exception - d. h. Programme, die Qt 4.4 verwenden, müssen unter einer freien Lizenz stehen, sonst muss man eine Lizenz bezahlen oder fürs Mini-Commercial-Projekt sich in die Kriminalität begeben. Da wird man sich aber jetzt kaum noch drum scheren, denn Qt 4.5 steht vor der Tür und wird unter die LGPL fallen, sodass jeder seine Software mit Qt linken kann.

    MVC und GraphicsView:
    Durch MVC kann man Daten von der Anzeige trennen. Qt bietet einmal Basisklassen als MVC-Basisframework und auch ausgereifte Views. So erstellt man ziemlich schnell Klassen mit Listendaten/Tabellen, die dann von einem fertigen View dargestellt werden und die den Benutzer auch Daten schreiben lassen können. Das gbit es dann auch für Baumstrukturen und anderem.
    QGraphicsView dagegen stellt QGraphicsScenes dar, in der man wunderbar zeichnen kann. Sie kann lauter getrennte Items enthalten, mit Drehung und Zoom. Auch OpenGL und Widgets lassen sich in die QGraphicsScenes einbauen, wie es bei obigen Link getan wurde.

    Alles ist natürlich für alle Systeme verfügbar. ;)
    Links:
    http://www.qtsoftware.com/ - Offizielle Seite von Qt, der Download ist relativ groß, ~130
    MB, weil da Dokumentation und lauter Tools dabei sind, mit dem Paketmanager kommt man günstiger davon
    http://doc.trolltech.com - Dokumentation, viele Beispielprogramme und ein paar Tutorials, aber Learning by Doing ist besser
    http://doc.trolltech.com/qtjambi-4.4/ht…i-examples.html - Die Seite mit Java-Tutorials und ganz vielen Beispielen
    http://techbase.kde.org/Development/Tu…ss/Introduction - Scripting mit Kross

    Zu guter Letzt noch ein kleines Programm von mir, das Bilder skaliert, verwendet Layouts, Designer, die Bild-Funktionen und ein wenig ModelView:
    http://files.the-user.org => einzige Datei .tar.bz2
    Zum Compilieren wie immer qmake, make, eventuell make install.
    Steht unter GPL.

    Viele liebe Grüße
    The User