Tam Hanna Selbstständig

Das Scheitern von Microsofts Ambitionen im Mobilcomputermarkt stellt Entwickler vor eine ungünstige Situation: Möchten Sie Ihren Code mobil und stationär anbieten, müssen sie auf Cross-Plattform-Entwicklung setzen. Qt ist ein „alter Klassiker“ dieser Branche, den wir uns im Folgenden näher ansehen wollen.

Dem Autor ist bekannt, dass die Erzeugung von Android-Applikationen sowohl mit Xamarin als auch mit Android Studio am Ende des Tages keine weltaufhaltende Aufgabe ist. Die Verwendung von Cross-Plattform-Produkten bringt trotzdem ihre Vorteile – denken Sie beispielsweise daran, dass Sie durch intelligente Verwendung von Cross-Plattform-Programmen die logische Kopplung in ihrer Gesamtarchitektur reduzieren. Gibt es im Programm statt zwei nur noch eine Instanz einer bestimmten Klasse, gibt es bei Deserialisierung und anderen Nettigkeiten weniger Brösel.

Im Rahmen dieser Artikelserie werden wir die Cross-Plattform-Programmierumgebung Qt genauer unter die Lupe nehmen – schon deshalb, weil das altehrwürdige Framework quasi nicht totzukriegen ist und sich immenser Verbreitung auf dem Markt erfreut. Zudem gibt es kaum eine Zielplattform, die nicht unterstützt wird – insbesondere im Embedded- und Linuxbereich ist Embarcadero weit unterlegen, obwohl das Produkt im Bereich des GUI-Stacks und der Service-Integration (Stichwort: Datenbanken) an dieser Stelle auch eine ausführliche Erwähnung verdient hätte.

Wie funktioniert Qt?

Cross-Plattform-Programmierumgebungen sind per se nichts Neues: Wer ein Java- oder ein .NET-Programm auf einem Zielsystem ausführt, verwendet normalerweise eine Runtime. In Zeiten von Prozessoren mit vier oder acht Prozessorkernen ist das im Allgemeinen kein Problem; dass es aus Sicht von Speicher- und Prozessorressourcen jedoch alles andere als effizient ist, ergibt sich aus der Logik.

Eins der wichtigsten Verkaufsargumente für Qt ist, dass das Produkt zur Laufzeit ohne Interpreter auskommt. Stattdessen kommt der in Abbildung 1 gezeigte Workflow zum Einsatz, der den C++-Compiler der jeweiligen Zielplattform „erbeutet“ und am Ende des Tages eine von einer nativen C++-Applikation nur durch die Einbindung zusätzlicher Bibliotheken unterscheidbare Applikation generiert.

Abb. 1: Die Kompilation einer Qt-Applikation erfolgt mehrstufig

Abb. 1: Die Kompilation einer Qt-Applikation erfolgt mehrstufig

Im ersten Schritt kommt das qmake-Werkzeug zum Einsatz. Es hat die Aufgabe, einen für den nativen C++-Compiler des Ziels verwendbare Gruppe von Makefiles zu erzeugen. Diese werden dann wie jede andere Applikation kompiliert.

Es bleibt die Frage, was unser Workflow mit diversen Qt-ismen wie dem Signal-Slot-System, das wir zu einem späteren Zeitpunkt noch betrachten werden, macht. Die Antwort darauf ist ein als Meta-Object Compiler (moc) bezeichnetes Programm. Es hat die Aufgabe, den nicht standardisierten Teil des Codes durch Strukturen zu ersetzen, die dem C++-Standard entsprechen. Dabei entsteht eine Vielzahl von Intermediärdateien, die man – und das ist wichtig – auf keinen Fall in die diversen Versionskontrollsysteme einbinden sollte.

Neben moc bringt Qt eine Gruppe anderer Hilfswerkzeuge mit, die u. a. Ressourcendateien und andere Nettigkeiten transpilieren. Für Sie als Entwickler ist dieser Workflow – im Moment – allerdings nur aus Verständnisgründen wichtig; relevanter ist es, Qt so schnell wie möglich auf ihre Workstation zu bringen.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Windows Developer 6.19 - "Challenge Accepted"

Alle Infos zum Heft
579889816Nativ aussehende Cross-Plattform-Apps mit Qt erzeugen
X
- Gib Deinen Standort ein -
- or -