Wer An­wen­dun­gen ent­wi­ckelt, weiß darum, wie komplex Kreation und Struk­tu­rie­rung der einzelnen Kom­po­nen­ten sind. Bi­blio­the­ken und Frame­works mit ihren ein­satz­fer­ti­gen Kom­po­nen­ten spielen deshalb eine wichtige Rolle. Diese helfen nicht nur bei der Ver­ein­heit­li­chung des Ent­wick­lungs­pro­zes­ses, sondern ver­ein­fa­chen diesen auch. Das platt­form­über­grei­fen­de Framework Qt bei­spiels­wei­se nimmt Ihnen eine Menge Arbeit bei der Ent­wick­lung gra­fi­scher Be­nut­zer­ober­flä­chen und ganzer Programme ab, wobei ins­be­son­de­re eine rei­bungs­lo­se Zu­sam­men­ar­beit zwischen Designern und Ent­wick­lern im Fokus steht. Hierfür sorgen Kom­po­nen­ten wie die in­te­grier­te Ent­wick­lungs­um­ge­bung Qt Creator, eine eigene Aus­zeich­nungs­spra­che sowie diverse, frei wählbare Module.

Was ist Qt?

Weil sie un­zu­frie­den mit den Tools zur platt­form­über­grei­fen­den Software-Ent­wick­lung waren, begannen die beiden Norweger Haavard Nord und Eirik Chambe-Eng 1990 mit der Ent­wick­lung von Qt. Zwei Jahre später gründeten sie das Un­ter­neh­men Trolltech, das zwi­schen­zeit­lich vom Te­le­kom­mu­ni­ka­ti­ons­kon­zern Nokia und 2012 von der fin­ni­schen Software-Firma Digia über­nom­men wurde. Seit 2014 ist das Digia-Toch­ter­un­ter­neh­men The Qt Company für die Ent­wick­lung zuständig.

Im Laufe der Jahre hat sich Qt dabei von einer einfachen Klas­sen­bi­blio­thek zu einem um­fang­rei­chen Framework ent­wi­ckelt und zahl­rei­che Wechsel des Li­zenz­mo­dells hinter sich. Das heutige duale Li­zenz­sys­tem, das dem Nutzer die Wahl zwischen einer pro­prie­tä­ren Lizenz und den Open-Source-Lizenzen GPL und LGPL lässt, macht sowohl die ge­mein­nüt­zi­ge als auch die kom­mer­zi­el­le Nutzung möglich.

Qt ist in C++ pro­gram­miert, wobei die Pro­gram­mier­spra­che durch den Prä­pro­zes­sor MOC (Meta-Object Compiler) um Features wie den ele­men­ta­ren Signal- und Slot-Me­cha­nis­mus (er­mög­licht die er­eig­nis­ge­steu­er­te Kom­mu­ni­ka­ti­on zwischen Pro­gramm­ob­jek­ten) erweitert wird. Hierfür generiert der Prä­pro­zes­sor noch vor der Kom­pi­lie­rung stan­dard­kon­for­mes C++ aus dem Qt-Quellcode. In der Kon­se­quenz können Qt-An­wen­dun­gen mit gängigen C++ Compilern wie GCC, ICC, MinGW oder MSVC übersetzt werden. Neuere Versionen des Frame­works bieten zudem Zugriff auf die Qt-eigene Aus­zeich­nungs­spra­che QML, die ins­be­son­de­re bei der GUI-Ent­wick­lung für Ver­ein­fa­chun­gen sorgt. Abseits dieser internen Sprach­lö­sun­gen gibt es ver­schie­de­ne, von Dritt­an­bie­tern be­reit­ge­stell­te An­bin­dun­gen für andere Pro­gram­mier­spra­chen wie Python, Ruby, Go, Java oder PHP.

Mit qmake (Stan­dard­lö­sung) und Qbs (Qt Build Suite) hält das Framework zwei eigene Build-Systeme bereit, wobei grund­sätz­lich auch andere Systeme wie CMake genutzt werden können. Zudem steht Nutzern die eigene in­te­grier­te Ent­wick­lungs­um­ge­bung Qt Creator zur Verfügung, die u. a. über einen Code-Editor verfügt und einen Schnell­zu­griff auf die gewählten Kom­po­nen­ten er­mög­licht.

Die wich­tigs­ten Qt-Kom­po­nen­ten im Überblick

Mit der Zeit ist das Qt-Framework immer um­fang­rei­cher geworden. So wurde nicht nur intensiv an der Qualität der in­te­grier­ten Ent­wick­lungs­um­ge­bung Qt Creator sowie an der Sprach- und Platt­form­un­ter­stüt­zung ge­ar­bei­tet, sondern auch daran, Pro­gram­mie­rern und Designern eine möglichst breite Funk­ti­ons­pa­let­te zur Verfügung zu stellen. Dabei legt das Qt-Team seit jeher Wert darauf, auch spe­zi­fi­sche An­wen­dungs­sze­na­ri­en aus dem Desktop- wie aus dem Mobile-Sektor ab­zu­de­cken.

Da nur die wenigsten An­wen­dun­gen auf Basis von Qt auf den kom­plet­ten Funk­ti­ons­um­fang an­ge­wie­sen sind, ist das Framework seit Version 4 in Module ge­glie­dert. Diese lassen sich frei auswählen und zu­sam­men­set­zen, was sowohl dem Qt-Team als auch den Nutzern eine hohe Fle­xi­bi­li­tät bei der Ent­wick­lung gewährt. Mit Version 5 hat das Qt-Team eine zu­sätz­li­che Un­ter­schei­dung der Module in Ba­sis­mo­du­le (Qt Es­sen­ti­als) und Zu­satz­mo­du­le für spezielle Ein­satz­zwe­cke (Qt Add-ons) ein­ge­führt.

Qt Es­sen­ti­als

Qt Es­sen­ti­als bilden platt­form­über­grei­fend die Basis von Qt. Sie sind auf allen un­ter­stütz­ten Ent­wick­lungs­platt­for­men ebenso wie auf allen ge­tes­te­ten Ziel­platt­for­men verfügbar und für einen Großteil der ent­wi­ckel­ten An­wen­dun­gen relevant bzw. nützlich. Folgende Module zählen zu den es­sen­zi­el­len Kom­po­nen­ten des Frame­works:

Modul Be­schrei­bung
Qt Core Nicht­gra­fi­sche Kern­klas­sen, die von allen anderen Modulen benötigt werden
Qt GUI Ba­sis­klas­sen zu Ge­stal­tung gra­fi­scher Be­nut­zer­ober­flä­chen; be­inhal­tet OpenGL
Qt Mul­ti­me­dia Set von QML-Typen und C++-Klassen für die Ver­ar­bei­tung von Mul­ti­me­dia-Inhalten (Audio/Video); APIs für den Zugriff auf Kamera- und Radio-Funk­tio­na­li­tät
Qt Mul­ti­me­dia Widgets Auf Widgets ba­sie­ren­de Klassen zur Im­ple­men­tie­rung von Mul­ti­me­dia-Funk­tio­na­li­tät
Qt Network APIs für An­wen­dun­gen, die auf TCP/IP-Netzwerke zu­rück­grei­fen
Qt QML Framework und Typen der Qt-Aus­zeich­nungs­spra­che QML
Qt Quick De­kla­ra­ti­ves Framework für die Ent­wick­lung hoch­dy­na­mi­scher An­wen­dun­gen mit maß­ge­schnei­der­ten QML-Be­dien­ober­flä­chen
Qt Quick Controls 2 Qt-Quick-Er­wei­te­rung: leicht­ge­wich­ti­ge, sehr ef­fi­zi­en­te QML-Typen, die die Interface-Er­stel­lung ver­ein­fa­chen
Qt Quick Dialogs Qt-Quick-Er­wei­te­rung: Typen für die Kreation und In­ter­ak­ti­on mit Sys­tem­dia­lo­gen
Qt Quick Layouts Qt-Quick-Er­wei­te­rung: QML-Typen für die Anordnung von Objekten im ent­wi­ckel­ten Interface
Qt Quick Test Test-Framework für QML-Ap­pli­ka­tio­nen; die Testfälle sind als Ja­va­Script-Funk­tio­nen be­schrie­ben
Qt SQL Klassen für die In­te­gra­ti­on von SQL-Da­ten­ban­ken
Qt Test Klassen für de­tail­lier­te Tests von Qt-Ap­pli­ka­tio­nen und -Bi­blio­the­ken
Qt Widgets Set von UI-Elementen zum Kreieren klas­si­scher, auf Widgets ba­sie­ren­der Be­nut­zer­ober­flä­chen mit dem Qt Designer

Welche Module zum Einsatz kommen, un­ter­schei­det sich wie erwähnt von Anwendung zu Anwendung. Ent­schei­dend sind dabei in erster Linie die An­for­de­run­gen, die das jeweilige Projekt erfüllen muss. In einigen Fällen ist es aber auch maß­geb­lich, mit welchen Tools Sie arbeiten wollen: So sind die Module Qt Core und Qt GUI stan­dard­mä­ßig ein­ge­bun­den, wenn Sie mit qmake arbeiten wollen. Wählen Sie Qbs oder eine andere Lösung als Build-System, existiert es eine solche vor­de­fi­nier­te Ab­hän­gig­keit nicht.

Bei der Ge­stal­tung gra­fi­scher Be­nut­zer­ober­flä­chen bietet Qt ebenfalls zwei un­ter­schied­li­che Mög­lich­kei­ten, die die Wahl der Kern­mo­du­le be­ein­flus­sen: Ei­ner­seits steht mit dem Qt Designer ein WYSIWYG-Editor zur Verfügung, der eng an die Qt Widgets geknüpft ist. An­de­rer­seits ist mit Qt Quick eine Al­ter­na­ti­ve (inklusive ver­schie­de­ner er­wei­tern­der Module) aus­wähl­bar, die die Ent­wick­lung mit der QML-Sprache er­mög­licht.

Qt Add-ons

Mit dem Label „Qt Add-ons“ werden alle Module versehen, die den Nutzern von Qt einen zu­sätz­li­chen Nutzen für spe­zi­fi­sche Zwecke bringen. Während einige dieser Zu­satz­mo­du­le wie die Kern­mo­du­le für alle un­ter­stütz­ten Ent­wick­lungs- und Ziel­platt­for­men kon­zi­piert sind, ist ein Großteil dieser Kom­po­nen­ten nur auf be­stimm­ten Platt­for­men ein­setz­bar. So funk­tio­niert das Add-on Qt Bluetooth, das Zugriff auf Bluetooth-Hardware gewährt, bei­spiels­wei­se nur in Android-, iOS-, Linux- und macOS-An­wen­dun­gen; Module wie Qt Windows Extras, Qt Mac Extras oder Qt Android Extras arbeiten nur in Pro­gram­men für die ent­spre­chen­den Ziel­platt­for­men.

Zudem gibt es drei Add-ons, die lediglich unter der kom­mer­zi­el­len Lizenz oder unter der GNU-GPLv3-Lizenz verfügbar sind:

  • Qt Charts: UI-Kom­po­nen­ten zur Anzeige optisch an­spre­chen­der Diagramme (basierend auf sta­ti­schen oder dy­na­mi­schen Da­ten­mo­del­len)
  • Qt Data Vi­sua­liza­ti­on: UI-Kom­po­nen­ten für die 3D-Vi­sua­li­sie­rung von Daten
  • Qt Virtual Keyboard: Framework zur Im­ple­men­tie­rung ver­schie­de­ner Ein­ga­be­me­tho­den sowie vir­tu­el­ler Tas­ta­tu­ren auf QML-Basis (Ziel­platt­for­men: Linux, Windows)
Hinweis

Seit Qt 5 exis­tie­ren spezielle Zu­satz­mo­du­le („Value-Add Modules“), die aus­schließ­lich unter Ver­wen­dung der kom­mer­zi­el­len Lizenz verfügbar sind. Dazu zählt bei­spiels­wei­se das Modul Qt for Au­to­ma­ti­on, das ver­schie­de­ne Bi­blio­the­ken und Tools zur Ent­wick­lung von Au­to­ma­ti­sie­rungs­sys­te­men wie KNX (Ge­bäu­de­au­to­ma­ti­sie­rung) enthält.

Qt Creator

Die in­te­grier­te Ent­wick­lungs­um­ge­bung (IDE) Qt Creator versorgt Sie während des gesamten Ent­wick­lungs­pro­zes­ses mit zahl­rei­chen Tools und Au­to­ma­ti­sie­rungs­me­cha­nis­men. So hilft ein Ein­rich­tungs­ma­na­ger bei der Kreation eines neuen Projekts, indem er Sie Schritt für Schritt durch den Er­stel­lungs­pro­zess führt und au­to­ma­tisch alle not­wen­di­gen Dateien anlegt. Zudem be­schleu­nigt die IDE das Code-Schreiben. Hierfür bietet der in­te­grier­te Editor u. a. Features wie Syn­tax­her­vor­he­bung, au­to­ma­ti­sche Code-Ver­voll­stän­di­gung oder Feh­ler­über­prü­fung.

Hinweis

Bi­när­pa­ke­te für die In­stal­la­ti­on von Qt Creator (im Download von Qt enthalten) sind für die Be­triebs­sys­te­me Windows (ab 7), Ubuntu Linux (ab 16.04) und macOS (ab 10.10) verfügbar.

Folgende Tools sind zu­sätz­lich zum Code-Editor stan­dard­mä­ßig in Qt Creator in­te­griert:

  • qmake: Als Standard-Build-System von Qt ist qmake direkt in Qt Creator in­te­griert und im Pro­jekt­me­nü aus­wähl­bar. Andere Systeme lassen sich aber auch in der IDE ausführen. Um Qbs zu nutzen, öffnen Sie bei­spiels­wei­se einfach eine .qbs-Datei.
  • Qt Designer: Der Qt Designer ist das native Programm zum Designen und Erstellen gra­fi­scher Be­nut­zer­ober­flä­chen mithilfe von Qt Widgets. Der visuelle Editor erlaubt es, die Widgets beliebig zu­sam­men­zu­stel­len und an­zu­pas­sen.
  • Qt Linguist: An­wen­dun­gen können direkt in Qt Creator sprach­lich lo­ka­li­siert werden. Ent­wick­ler, Über­set­zer und Release-Manager finden hierzu die jeweils passenden Werkzeuge vor.
  • Qt Assistant: Mit Qt Assistant liefert Qt Creator einen schnellen Zugang zur of­fi­zi­el­len Do­ku­men­ta­ti­on des Frame­works. Hierfür gibt es eine Hilfs­funk­ti­on.

So funk­tio­niert die Software-Ent­wick­lung mit Signalen und Slots in Qt

Dank der An­bin­dun­gen an Python, Ruby, Go usw. un­ter­stützt Qt grund­sätz­lich diverse Sprachen. Die native Pro­gram­mier­spra­che des Frame­works bleibt aber in jedem Fall C++, wobei die Er­wei­te­rung dieser ob­jekt­ori­en­tier­ten Sprache durch den MOC-Prä­pro­zes­sor für einige neue Aspekte und Pa­ra­dig­men wie die bereits genannten Signale und Slots sorgt. Das Konzept er­mög­licht eine er­eig­nis­ge­steu­er­te Kom­mu­ni­ka­ti­on zwischen ver­wen­de­ten Pro­gramm­kom­po­nen­ten und stellt eine flexible Al­ter­na­ti­ve zu direkten Rückruf-Funk­tio­nen (Callbacks) dar. So er­mög­licht es bei­spiel­wei­se die Ver­knüp­fung von Objekten oder Modulen, ohne dass sich diese zwangs­läu­fig kennen müssen.

Hinweis

Qt ist der Urheber des Signal-Slot-Konzepts und hat dieses im Laufe der Jahre ent­schei­dend geprägt. Mitt­ler­wei­le greifen aber auch viele andere Pro­gramm­bi­blio­the­ken und Frame­works wie Flow auf das Ver­knüp­fungs­mo­dell zurück.

Konkret handelt es sich bei einem Signal um eine Nachricht, die ein Objekt sendet, sobald ein be­stimm­tes Ereignis eintritt. Ein Slot wiederum ist eine ge­wöhn­li­che Funktion, die mit einem Signal verknüpft werden kann, um in der Folge immer dann aus­ge­führt zu werden, wenn sie das Signal erhält. Es ist möglich, ein Signal mit mehreren Slots zu ver­knüp­fen, sodass mehrere Funk­tio­nen als Resultat eines einzelnen Er­eig­nis­ses auf­ge­ru­fen werden. Ebenso lässt das Pro­gram­mie­rungs­kon­zept die Ver­knüp­fung mehrerer Signale mit einem einzelnen Slot zu. In diesem Fall wird ein und dieselbe Funktion beim Auftreten un­ter­schied­li­cher Er­eig­nis­se auf­ge­ru­fen.

Die Signale und Slots helfen dabei, eine er­eig­nis­ori­en­tier­te Funk­tio­na­li­tät in die Be­nut­zer­ober­flä­che der ent­wi­ckel­ten Anwendung zu bringen. In Qt müssen Sie die Signal-Slot-Ver­knüp­fun­gen al­ler­dings nicht mühsam und einzeln per Hand anlegen – viele der mit­ge­lie­fer­ten Klassen des Frame­works bieten Zugriff auf diverse vor­de­fi­nier­te Signale und Slots. Sie können bei Bedarf aber auch eigene Objekt-Ver­bin­dun­gen erstellen.

Was kann die Qt-eigene Aus­zeich­nungs­spra­che QML?

Seit Version 4.7 ist Qt mit der haus­ei­ge­nen Aus­zeich­nungs­spra­che QML aus­ge­stat­tet. Diese zeichnet sich u. a. dadurch aus, dass sie eine JSON-ähnliche Syntax hat und im­pe­ra­ti­ve Ja­va­Script-Ausdrücke un­ter­stützt. Im Zentrum steht al­ler­dings die de­kla­ra­ti­ve Be­schrei­bung der GUI-Elemente, die für einen über­sicht­li­chen Pro­gramm­code sorgt. QML vereint also de­kla­ra­ti­ve und im­pe­ra­ti­ve Ansätze in einer einzelnen Pro­gram­mier­spra­che, was dem Ent­wick­ler eine Menge Spielraum gewährt. Haben Sie das Modul Qt Quick aus­ge­wählt, haben Sie mit dem Qt Quick Compiler das passende Werkzeug für die Kom­pi­lie­rung des QML-Codes in natives C++ parat. Außerdem können Sie den gleich­na­mi­gen Designer (Qt Quick Designer) in Qt Creator nutzen, um mit vor­ge­fer­tig­ten QML-Kom­po­nen­ten zu arbeiten.

QML offenbart seine Stärken ins­be­son­de­re bei der GUI-Ent­wick­lung: Aufgrund der we­sent­lich ein­fa­che­ren Syntax und der Un­ter­stüt­zung von Ja­va­Script bietet sie Designern einen deutlich besseren Zugang als C++. So lassen sich z. B. pro­blem­los in JSON verfasste Be­nut­zer­ober­flä­chen durch Export aus Photoshop erstellen, was den Ent­wick­lungs­pro­zess erheblich be­schleu­nigt. Auch wenn es theo­re­tisch möglich ist, das gesamte Programm in QML zu schreiben, kommt die Aus­zeich­nungs­spra­che beim Pro­gram­mie­ren der An­wen­dungs­lo­gik eher selten zum Einsatz.

Hinweis

QML hat die UI-Er­stel­lung via Widgets in vielerlei Hinsicht über­flüs­sig gemacht. Ins­be­son­de­re, wenn es um Ani­ma­tio­nen und komplett be­nut­zer­spe­zi­fi­sche Layouts und Kon­troll­kom­po­nen­ten (Mobile, Touch­screen etc.) geht, spielt die Aus­zeich­nungs­spra­che ihre Stärken aus. Geht es al­ler­dings um tra­di­tio­nel­le Desktop-Be­dien­ele­men­te wie Me­nü­leis­ten, Sym­bol­leis­ten oder Drag-and-Drop-Kom­po­nen­ten, bieten Widgets eine bessere Un­ter­stüt­zung, weshalb ihre Nutzung in klas­si­schen Desktop-Um­ge­bun­gen immer noch weit ver­brei­tet ist.

Auf welchen Platt­for­men läuft Qt?

Qt wird von diversen 32- und 64-Bit-Platt­for­men un­ter­stützt. Zur Nutzung des Frame­works ist in der Regel nicht mehr als GCC oder ein anderer Compiler nötig. Für die Ver­wen­dung von Qt Quick wird darüber hinaus Open GL, DirectX oder ein al­ter­na­ti­ver Renderer gebraucht. Das Ent­wick­ler­team listet für die aktuelle Qt-Version folgende offiziell un­ter­stütz­ten Platt­for­men auf:

Plattform Version Compiler
Windows 10, 8.1, 7, UWP (Universal Windows Platform) MSVC 2017, MSVC 2015, MinGW 5.3
Linux/X11 openSUSE 42.2, Red Hat En­ter­pri­se Linux 6.6 und 7.2, Ubuntu 16.04 GCC (ab 4.8), ICC
Android ab 4.1 GCC, MinGW 5.3
macOS etc. macOS (ab 10.11), iOS 10 und 11, tvOS 10 und 11, watchOS 3 und 4 Clang (Apple)
Ein­ge­bet­te­te Systeme Embedded Linux, Embedded Linux (Boot2Qt), QNX 6.6.0 und 7.0, INTEGRITY 11.4.4 GCC

Wo kommt Qt zum Einsatz?

Das wohl größte bekannte Software-Projekt, in dem das Qt-Framework zum Einsatz kommt, ist KDE Plasma (vormals KDE Plasma Workspaces). Dabei handelt es sich um eine Reihe von Desktop-Um­ge­bun­gen bzw. seit Version 5 eine einzelne flexible Umgebung der Open-Source-Community KDE für ver­schie­de­ne Geräte (Desktop, Notebook, Netbook, Tablet, Smart­phone). Layouts und Kon­troll­ele­men­te sind dabei in den ver­schie­de­nen Desktop-Varianten dank Qt perfekt auf die An­for­de­run­gen der je­wei­li­gen Geräte zu­ge­schnit­ten.

Weitere pro­mi­nen­te Beispiele für Software auf Basis von Qt zeigen, wie viel­sei­tig die An­wen­dungs­sze­na­ri­en des Frame­works sind:

Mul­ti­me­dia:

  • das Bild­be­ar­bei­tungs­pro­gramm Adobe Photoshop Elements
  • das Bild­ver­wal­tungs­pro­gramm Adobe Photoshop Album
  • der freie Mul­ti­me­dia-Player VLC Media Player
  • die Linux-App des Mu­sik­strea­ming-Dienstes Spotify

Kom­mu­ni­ka­ti­on:

  • die Linux-Edition des Kom­mu­ni­ka­ti­ons-Tools Skype
  • der Instant-Messaging-Dienst Telegram
  • die Sprach­kon­fe­renz-Software TeamSpeak

File­sha­ring:

  • der P2P-Client Marabunta
  • der KDE-Download-Manager KGet
  • der Bit­Tor­rent-Client Trans­mis­si­on

3D-Grafik-Tools:

  • die 3D-Mo­del­lie­rungs­soft­ware Adobe Muse CC
  • die 3D-Vir­tua­li­sie­rungs­soft­ware Autodesk Maya
  • die CAD-Software AutoQ3D

Spiele:

  • Monkey Island
  • Dust Racing 2D

Sonstige:

  • das Layout-Programm Scribus
  • die Ma­the­ma­tik-Software Ma­the­ma­ti­ca
  • die Notations- und Kom­po­si­ti­ons­soft­ware Sibelius

Fazit: Flexibles Framework für viel­fäl­ti­ge Cross-Plattform-Projekte

Qt ist ein Framework-Urgestein, das sich stets den An­for­de­run­gen moderner GUIs angepasst hat. Nicht von ungefähr zählt die in C++ ge­schrie­be­ne Tool-Sammlung auch über zwei Jahr­zehn­te nach Release der ersten Version zu den be­lieb­tes­ten Lösungen für die platt­form­un­ab­hän­gi­ge Ent­wick­lung gra­fi­scher Be­nut­zer­ober­flä­chen. Hierfür sorgen ins­be­son­de­re Tools wie der Qt Creator oder die in neueren Versionen im­ple­men­tier­te Aus­zeich­nungs­spra­che QML, die nicht nur den Ar­beits­pro­zess im All­ge­mei­nen op­ti­mie­ren, sondern auch die Zu­sam­men­ar­beit zwischen Designern und Pro­gram­mie­rern ver­ein­fa­chen.

Zum Hauptmenü