Suchen

Komponenten

Multiplattform-Entwicklung mit dem Qt-Framework

Seite: 2/3

Firmen zum Thema

Aushängeschild von Qt: Grafische Elemente

Die Bibliotheken für die graphischen Elemente sind das buchstäblich augenfälligste und wohl bekannteste Beispiel für die Problematik der Plattformunabhängigkeit. Lautet die Aufgabe, in C++ eine native GUI für Windows zu erstellen, war lange Zeit die MFC die einzige Möglichkeit, während es unter Linux mehrere Bibliotheken gab. Mit neueren Windows-Versionen kamen auch hier neue Möglichkeiten hinzu, aber das Grundproblem blieb bestehen: Diese GUI-APIs gibt es nur unter Windows. Möchte man dieselbe GUI auch unter Linux anbieten können, kommt man um eine für beide Plattformen verwendbare Bibliothek nicht herum, möchte man nicht zwei GUIs pflegen. Qt ist eine dieser Möglichkeiten.

Die grafischen Elemente sind der wohl bekannteste Teil von Qt. Die klassische Form sind die mit C++ programmierbaren QWidgets für Dialoge und Anwendungsfenster. Sie können alternativ auch deklarativ über XML angesprochen werden, sodass etwa Dialoge mit einem mitgelieferten grafischen Designer erstellt werden können. Die neueste Form der Anwendungsgestaltung, QML mit QtQuick, lehnt sich dagegen eher an Web-Technologien an. Es gibt jedoch verknüpfende Elemente zur C++-Welt von Qt.

Die Grafikoberflächen unter Linux gestalten sich indes recht unterschiedlich. Während auf dem Desktop aktuell ein X-Server von X.org genutzt wird, wird es zukünftig wohl eher Wayland sein. Embedded-Geräte nutzen dagegen oft direkt auf einem Framebuffer aufbauende Techniken. Die meisten dieser Möglichkeiten werden auch von Qt unterstützt, die Reife der Umsetzung ist jedoch recht unterschiedlich und damit im Einzelfall zu prüfen.

Auch die Verwendung von 3-D-Elementen ist unter Windows und Linux möglich, Qt-intern wird dazu jedoch immer auf OpenGL zurückgegriffen. Während unter Linux OpenGL der Systemstandard für 3D ist, ist die Unterstützung von OpenGL unter Windows nicht immer gegeben. Daher wird bei Qt5 die ANGLE-Bibliothek mitgeliefert, die automatisch nach DirectX 9 oder 11 konvertieren kann. Alternativ, wenn etwa eine Grafikkarte kein DirectX unterstützt, wird alles in Software gerendert, was aber sehr zeitaufwändig ist. Die Unterstützung für OpenGL wird bei Programmstart geprüft oder durch den User vorgegeben.

Je nach Anforderung kann der Darstellungsstil der integrierten Elemente angepasst werden, so dass sie etwa zur Desktop-Oberfläche passen. Dabei werden nicht die nativen Widgets der Plattform verwendet, so dass eine einfache Oberfläche auch unter Linux einer nativen Windowsanwendung zumindest sehr ähnlich sehen kann, etwa für den oben genannten Fall der UI-Simulation. Alternativ wählt man je nach Plattform einen anderen Stil zur besseren Desktop-Integration.

Mit dieser Vielseitigkeit kann sich Qt zwar vielen Umgebungen anpassen, doch gehen mit dieser Flexibilität auch Probleme einher. Auch wenn man auf jeder Plattform denselben Stil verwendet, sind die Elemente in ihrer Größe leicht variabel, da beispielsweise das zugrunde liegende Font-Rendering unterschiedlich ist oder die verwendeten Fonts eben doch nicht komplett gleich sind. Diese Probleme sind jedoch lösbar, da die in Qt enthaltenen Widgets ihre benötigte Größe meist selbst berechnen können. Dies sollte man auch bei eigenen Widgets beachten, um Darstellungsfehler zu vermeiden.

Diese Größeninformationen werden von Layouts in Kombination mit weiteren Layout-Regeln genutzt, um Widgets in Dialogen und Anwendungen möglichst optimal anzuordnen. Solche Regeln beinhalten den Platz zwischen Widgets und die Größenänderung der Widgets, einzeln und relativ zueinander. Widgets, die nicht zu einem Layout gehören wie etwa Dialoge, bestimmen ihre Größe selbst und damit auch den verfügbaren Platz für alle ihnen untergeordneten Widgets. Dies kann leicht zu Widgets mit abgeschnittenem Text führen.

Artikelfiles und Artikellinks

(ID:44363830)