Software Architektur · Qt Framework
Softwarearchitektur mit dem Qt Framework
Qt ist das Framework der Wahl fuer industrielle Desktop- und Embedded-Anwendungen. Aber "Qt benutzen" und "Qt-Architektur beherrschen" sind zwei verschiedene Dinge.
Die meisten Teams verwenden Qt als Widget-Toolkit. Das ist wie ein Schweizer Taschenmesser ausschliesslich als Flaschenoeffner zu benutzen. Qt ist ein Architektur-Framework: Signals/Slots, Property-System, Model/View, Plugin-System, QML-Engine. Die Architekturentscheidungen der ersten zwei Wochen bestimmen die naechsten fuenf Jahre Wartungsaufwand.
Wir haben in den letzten 15 Jahren Qt-Projekte gebaut und geerbt. Die gut strukturierten waren nach 5 Jahren noch erweiterbar. Die schlecht strukturierten waren nach 2 Jahren praktisch nicht mehr wartbar — bei identischer Codebasis-Groesse.
Die Qt-Architektur-Schichten
Qt ist in Schichten organisiert. Wer diese Schichten ignoriert, baut monolithische Anwendungen, die an jeder Stelle brechen.
Layer 1: Core
QObject, Signals/Slots, Event Loop, Property System. Das ist das Fundament. Jede Klasse, die von QObject erbt, hat Zugriff auf Meta-Objekt-Informationen, automatische Speicherverwaltung ueber Parent-Child-Hierarchien und thread-sichere Signal-Verbindungen. Architektonisch bedeutet das: Ihre gesamte Kommunikation kann lose gekoppelt laufen — wenn Sie es zulassen.
Layer 2: Data
QAbstractItemModel, Proxy Models, SQL-Backends. Das Model/View-System ist Qts staerkste und am meisten unterschaetzte Architekturkomponente. Richtig eingesetzt trennt es Datenlogik komplett von der Darstellung. Falsch eingesetzt — oder ignoriert — landet die Datenverarbeitung im UI-Code.
Layer 3: UI
QML versus Widgets — die zentrale Architekturentscheidung. Beide Technologien haben legitime Einsatzgebiete. Die Wahl bestimmt Build-System, Team-Zusammensetzung und langfristige Wartbarkeit. Hybride Ansaetze sind moeglich, erhoehen aber die Komplexitaet deutlich.
Layer 4: Integration
IPC, serielle Schnittstellen, Netzwerk, Plugins. Qt liefert fuer all das Module mit. Die Architekturentscheidung: Verwenden Sie Qts Abstraktionen oder Ihre eigenen? Qts Module sind gut getestet, aber schaffen Abhaengigkeit zum Qt-Oekosystem. Eigene Abstraktionen sind portabler, aber muessen gepflegt werden.
QML vs Widgets — die Architekturentscheidung
Widgets: stabil, ausgereift, C++-nativ, laeuft auf minimaler Hardware. Waehlen Sie Widgets fuer: Medizingeraete (IEC 62304), Verteidigungs-HMIs, klassische Desktop-Anwendungen. Widgets sind vorhersehbar — und in regulierten Umgebungen ist Vorhersehbarkeit wichtiger als Aesthetik.
QML: modern, GPU-beschleunigt, responsiv, einfacher fuer Designer. Waehlen Sie QML fuer: Automotive-Dashboards, Consumer-Kiosks, datenreiche UIs mit Animationen. QML erfordert eine saubere C++/QML-Grenze — sonst wird die Anwendung unwartbar.
Hybrid: moeglich, aber komplex. C++-Backend mit QML-Frontend ist der Sweet Spot fuer neue Projekte. Entscheidend ist die klare Trennung: C++ liefert Daten und Logik, QML stellt dar.
// C++ Backend: Datenmodell exponieren
class SensorModel : public QAbstractListModel {
Q_OBJECT
Q_PROPERTY(int count READ count NOTIFY countChanged)
public:
enum Roles { ValueRole = Qt::UserRole + 1, TimestampRole };
int rowCount(const QModelIndex&) const override;
QVariant data(const QModelIndex&, int role) const override;
signals:
void countChanged();
};
// QML Frontend: Darstellung
import QtQuick 2.15
ListView {
model: sensorModel
delegate: Row {
Text { text: model.value }
Text { text: model.timestamp }
}
}
Typische Architektur-Fehler
- God-Object MainWindow: Alles in einer Klasse. 5.000 Zeilen MainWindow.cpp. Nicht testbar, nicht erweiterbar, nicht migrierbar.
- Geschaeftslogik im UI-Layer: Berechnungen in Button-Click-Handlern. Folge: keine Unit-Tests moeglich, keine Migration auf andere UI-Technologie.
- Direktes SQL in QML: Datenbankabfragen ohne Model-Schicht. Jede Schemaanpassung bricht die UI.
- Event Loop ignorieren: Blockierende Aufrufe im Main Thread. Ergebnis: eingefrorene UI, frustrierte Anwender, instabile Anwendung.
- Keine Dependency Injection: Alles ist hart verdrahtet. Testing erfordert die gesamte Anwendung, Komponenten sind nicht austauschbar.
Beispiel aus der Praxis
Ein Medizintechnik-Hersteller betrieb eine Qt5 Widgets-Anwendung mit 200.000 Zeilen Code. Das MainWindow enthielt 40% der Geschaeftslogik. Migration zu Qt6 erforderte 8 Monate statt der kalkulierten 3 — weil die Architektur keine Schichten hatte. Die Logik war so stark mit der UI verzahnt, dass jede API-Aenderung Dutzende von Dateien betraf.
Trade-offs
- Lizenzkosten: Qt Commercial kostet 5.000-20.000 EUR/Entwickler/Jahr. Open Source (LGPL/GPL) ist moeglich, erfordert aber sorgfaeltige Lizenz-Compliance.
- QML-Overhead: Die QML-Engine braucht Speicher und GPU. Auf Embedded-Systemen mit 256 MB RAM ist das relevant. Widgets sind leichtgewichtiger.
- C++/QML-Bridge: Die Lernkurve ist steil. Teams brauchen 2-3 Monate, bis die Architektur sauber steht. Fruehe Fehler raechsich spaeter.
- Vendor Lock-in: Qt ist ein umfassendes Oekosystem. Je mehr Qt-Module Sie verwenden, desto schwieriger wird ein Wechsel. Das ist eine bewusste Entscheidung.
Landsberg am Lech · alpitype.de
Weiterführende Artikel
KI nutzen, ohne Daten in die Cloud zu schicken
On-premise KI: Wie Systeme vollständig lokal betrieben werden.
Sind Ihre Daten überhaupt für KI nutzbar?
Datenqualität prüfen, bevor Sie in KI investieren.
Was KI in einem realen Industrieprojekt kostet
Konkrete Zahlen, Phasen und ROI aus realen Projekten.
Nicht sicher, ob das auf Ihren Fall zutrifft?
Wir prüfen Ihr Setup in 2 Wochen und sagen Ihnen, ob KI machbar ist.
Machbarkeits-Audit anfragen →Sprechen Sie mit einem Ingenieur
Kein Vertrieb. Sie sprechen direkt mit einem unserer Software-Architekten über Ihr konkretes Problem. 30 Minuten. Antwort innerhalb von 24 Stunden.
Email: info@alpitype.com
LinkedIn: AlpiType