Qt hält Software plattformneutral

01.12.2006
Von Christian Dietrich
Software sollte plattformunabhängig erstellt werden, sonst gleicht eine spätere Portierung fast einer Neuimplementierung. Bezüglich der grafischen Steuerelemente bieten sich hierfür die Qt-Klassenbibliotheken an.

Es ist nachvollziehbar, dass viele Firmen erst spät im Entwicklungsprojekt darüber nachdenken, ob eine Anwendung zu einem späteren Zeitpunkt auch auf einer anderen Plattform laufen müsste und deshalb portabel sein sollte. Schließlich dominiert Windows nach wie vor die Welt der Betriebssysteme. Doch um sich neue Märkte zu eröffnen und größere Flexibilität zu schaffen, schlagen manche Unter- nehmen mittlerweile einen anderen Weg ein. Im Zentrum der Neuorientierung steht vielfach die Notwendigkeit, ein Softwarepaket für weitere Betriebssysteme bereitstellen zu können, um sich nicht komplett in die Abhängigkeit von Windows zu begeben.

Portierungen mit C++ gestalten

Qt bietet einen Designer, mit dem man das GUI-Layout per Drag and Drop erstellen kann.
Qt bietet einen Designer, mit dem man das GUI-Layout per Drag and Drop erstellen kann.

Die Probleme sind dabei trotz unterschiedlicher Projekte meist ähnlich, egal ob es sich um Software zum Visualisieren von Vektordaten oder um ein Programm zur Bonitätsprüfung von Kunden für eine Bank handelt, das in den Filialen des Konzerns zum Einsatz kommen soll. In der Praxis erfreut sich die Programmiersprache C++ gerade in solchen Projekten großer Beliebtheit, weil sich in der Vergangenheit gezeigt hat, dass sie sich insbesondere für die Entwicklung umfangreicher und effizienter Anwendungen eignet.

Das Entwicklungsmodell sieht dabei häufig so aus, dass die Basis der Anwendung ein portabler Quellcode ist, der oft sogar über 99 Prozent der Anwendung ausmacht, denn die International Organization for Standardization (ISO) hat C++ normiert. Betriebssystem-, Compiler- und prozessorspezifische Unterschiede sind jedoch plattformabhängig zu implementieren. Wie aber ist vorzugehen, wenn man den Compiler nicht "überfordern" will?

Standard Template Library

Ein Weg besteht darin, dem Compiler den plattformabhängigen Quellcode durch bedingte Übersetzung mit Hilfe des Präprozessors vorzuenthalten. Kommt zusätzlich die Standard Template Library (STL) zum Einsatz, so stehen dem Entwickler neben effizienten Container-Klassen wie Vektoren, Listen, Maps oder Stacks auch Algorithmen wie Binärsuche, Sortieren oder Merging zur Verfügung. Hinzu kommen Iteratoren und Funktionsobjekte. Die STL erleichtert die tägliche Arbeit immens, da die Container-Klassen die Implementierung mehrfach verwendeter Datenstrukturen vereinfacht.

Bibliothek für grafische Elemente

Häufig wird man jedoch mit dem Problem konfrontiert, dass der C++-Sprachumfang keine Funktionen zum Darstellen der grafischen Steuerelemente enthält. Dann verwendet man meist systemabhängige Bibliotheken wie die Microsoft Foundation Classes (MFC) unter Windows oder OSF/Motif unter Unix. Der Grund dafür ist, dass die grafische Ausgabe der Betriebssysteme, insbesondere Unix/Linux, Windows und Mac auf unterschiedlichen Prinzipien basiert und eng an das Betriebssystem gekoppelt ist. Dies führt zu dem entscheidenden Nachteil, dass die Plattformunabhängigkeit des Quellcodes verloren geht, da die Syntax abhängig von der verwendeten Bibliothek ist. Dieses Problem lässt sich vermeiden, indem eine Bibliothek mit plattformunabhängiger Schnittstelle zur Darstellung der grafischen Steuerelemente zum Einsatz kommt. Eine Möglichkeit bietet hier Qt, weil es sich bei dem Toolkit um ein umfangreiches Framework zur Entwicklung portabler Software basierend auf C++ handelt.

Auch bei der Entwicklung mit Qt werden systemabhängige Bibliotheken verwendet, allerdings sind deren Quellcodes größtenteils plattformunabhängig implementiert. Der entscheidende Vorteil in diesem Szenario besteht darin, dass die Bibliothek eine Betriebssystem-unabhängige Schnittstelle zur Verfügung stellt. Damit bleibt die Syntax des Quellcodes bei der Verwendung der Qt-Bibliothek unverändert, was die Portabilität der Software erhält.