Portierung von Qt 5 auf Qt 6 – Die 3 wichtigsten Gründe und Schritte

Qt QML-Entwicklung
2025-02-07
13 Minuten
Portierung von Qt 5 auf Qt 6

Die Veröffentlichung von Qt 6 stellt einen bedeutenden Meilenstein dar und bietet zahlreiche neue Funktionen und Verbesserungen gegenüber Qt 5. Wenn Sie derzeit die fünfte Version verwenden, ist jetzt der perfekte Zeitpunkt, um auf die nächste Version umzusteigen. Dieser Blogbeitrag führt Sie durch die wichtigsten Gründe für den Wechsel und gibt einen umfassenden Überblick über die Schritte im Portierungsprozess. Wenn Sie Fragen haben oder Unterstützung bei der Portierung Ihrer Anwendung benötigen, können Sie sich gerne an uns wenden.

Lassen Sie uns eintauchen und herausfinden, warum Qt 6 die optimale Wahl für Ihre zukünftigen Entwicklungsprojekte ist.

 

Unterschiede zwischen Qt 5 und Qt 6

Die Qt Company ist seit langem bekannt für ihre regelmäßigen Updates und kontinuierlichen Verbesserungen, die sicherstellen, dass Entwickler

Zugriff auf die neuesten Tools und Funktionen haben, um robuste und leistungsstarke Anwendungen zu erstellen. Mit der Veröffentlichung der neuen Version setzt diese Tradition der Innovation fort und bringt viele bedeutende Änderungen gegenüber der vorherigen Version mit sich. Diese Unterschiede zu verstehen, ist entscheidend für Entwickler, die das volle Potenzial der neuesten Version ausschöpfen möchten.

 

Änderungen in Qt Quick

Qt Quick hat mehrere Änderungen durchlaufen. Diese Updates zielen darauf ab, die Leistung, Flexibilität und Benutzerfreundlichkeit für Entwickler, die mit dem Qt-Framework arbeiten, zu verbessern. Die kleinen Änderungen sind:

Qt 5 nutzte hauptsächlich den Qt Quick Scene Graph, der OpenGL verwendete, während Qt 6 die neue Qt Rendering Hardware Interface (RHI) verwendet, die mehrere Backends wie Vulkan, Metal, Direct3D und OpenGL unterstützt. RHI bietet nicht nur Unterstützung für andere Systeme, sondern verbessert auch die Rendering-Leistung. Es kommt Qt Quick zugute, mit bemerkenswerten Verbesserungen in Qt Quick 3D bei der Handhabung komplexer Szenen mit zahlreichen darstellbaren Objekten. Dies führt zu einem flüssigeren und effizienteren Rendering, insbesondere bei grafikintensiven Anwendungen.

 

Die neueste Version führt Änderungen in der Shader-Unterstützung ein, die Entwicklern mehr Flexibilität und Leistung für benutzerdefinierte grafische Effekte bietet. Darüber hinaus unterstützt Qt 6 moderne Shading-Sprachen wie GLSL, HLSL und MSL, sodass Shader die Grafikfähigkeiten jeder Plattform vollständig nutzen können. Shader werden nun zur Laufzeit für die Zielplattform kompiliert, was die Leistung optimiert und die Hardwarefähigkeiten besser nutzt. Es enthält auch Qt Shader Tools, die bei der Verwaltung von Shadern, deren Debugging und der Umwandlung von Shadercode zwischen verschiedenen Shading-Sprachen helfen, was den Entwicklungsprozess vereinfacht.

 

Änderungen in QML

Qt 6 führt mehrere Verbesserungen in QML und QML-Dateien ein, um die Funktionalität und Benutzerfreundlichkeit zu verbessern. Zu den Änderungen gehört unter anderem die Umstellung von font.weight auf int, das Lesen von FontLoader.name als nur-lesbar und die Ersetzung von OpenGLInfo durch GraphicsInfo. Zusätzlich verwendet ShaderEffect jetzt URLs für Shader-Quelleneigenschaften anstelle von Inline-GLSL-Strings (Qt 6 QML-Änderungen Seite).

Diese Updates und viele mehr vereinfachen die QML-Entwicklung und machen sie flexibler.

 

Module und Funktionen

Mit der Weiterentwicklung von Qt bringt Qt 6.5 neue Module und überarbeitet bestehende. Einige Module und Add-Ons wurden entfernt, um das Framework zu optimieren und sich auf relevantere Funktionen zu konzentrieren. Diese Updates stellen sicher, dass Qt ein modernes Tool für die Anwendungsentwicklung bleibt.

 

Vergleichstabelle der entfernten Funktionen in Qt 5 und neuer Funktionen in Qt 6

Sie können die vollständige Liste der Moduländerungen und Funktionsupdates im Qt 5.15 LTS / 6.5 LTS Funktionsvergleich nachlesen.

 

CMake API

Auch die CMake-API hat sich geändert und verbessert die Benutzerfreundlichkeit und modernisiert den Build-Prozess. Hier sind einige wichtige Verbesserungen:

  1. Versionlose Ziele und Befehle – Qt 5.15 führte versionlose Ziele und Befehle ein, um den CMake-Code zu vereinfachen, der mit Qt 5 und Qt 6 funktioniert. Das bedeutet, dass Sie Qt::Core anstelle von Qt5::Core oder Qt6::Core verwenden können.

  2. Mischen von Qt-Versionen – Sie können Qt 5 und Qt 6 in einem CMake-Kontext laden.

  3. Unicode-Unterstützung – Die Compilerdefinitionen UNICODE und _UNICODE sind standardmäßig für Windows-Ziele gesetzt, was mit dem Verhalten von qmake übereinstimmt, jedoch vom CMake-Verhalten in Qt 5 abweicht.

  4. Verbesserte Dokumentation und Praktiken – Verbesserte Dokumentation und empfohlene Praktiken für eine bessere Kompatibilität und einen einfacheren Übergang.

  5. qt_add_qml_module – Diese neue CMake-Funktion vereinfacht die Konfiguration und Integration von QML-Modulen, reduziert Boilerplate-Code und macht den Build-Prozess intuitiver (Qt-Dokumentation).

  6. qt_add_resources – Eine weitere neue CMake-Funktion, die die Einbindung und Verwaltung von Ressourcen automatisiert. Dadurch wird der manuelle Aufwand reduziert und potenzielle Fehler vermieden, was eine dynamischere Handhabung von Ressourcenpfaden ermöglicht (Qt-Dokumentation).

Diese Verbesserungen zielen darauf ab, die Entwicklung zu vereinfachen und die Kompatibilität zwischen den Qt-Versionen sicherzustellen.

 

Qt Rendering Hardware Interface – neues grafisches Backend

 

Anstatt den Qt Quick Scene Graph für das Rendering zu nutzen, der in Qt 5 hauptsächlich auf OpenGL-Aufrufen basierte, führt Qt 6 die Qt Rendering Hardware Interface (RHI) ein, die die Grafik-API-Schicht abstrahiert und mehrere Backends wie Vulkan, Metal, Direct3D und OpenGL unterstützt. Dies macht Qt Quick vielseitiger und besser geeignet für verschiedene Plattformen und Hardware.

In ihrem Artikel „Graphics in Qt 6.0: QRhi, Qt Quick, Qt Quick 3D“ stellt Qt uns die Hauptschichten des Qt 6.0 Grafikstapels vor.

 

 

Warum auf Qt 6 portieren?

Nachdem wir die wichtigsten Unterschiede zwischen Qt 5 und Qt 6 verstanden haben, ist es offensichtlich, dass die Migration erhebliche Vorteile bietet. Die Portierung ermöglicht es Ihnen, signifikante Leistungsoptimierungen zu nutzen. Darüber hinaus führt die neueste Version neue Module und Funktionen ein, die ein reicheres und vielseitigeres Framework für Ihre Anwendungen bieten. Durch den Wechsel stellen Sie sicher, dass Ihre Projekte zukunftssicher sind und gleichzeitig Zugang zu laufenden Updates und den neuesten Entwicklungen im Qt-Ökosystem erhalten. Hier sind noch einige andere Gründe, warum die Portierung eine gute Idee ist.

 

 

1. Immer auf dem neuesten Stand bleiben

 

Nach der detaillierten Erläuterung der Unterschiede ist es klar, dass die neueste Version die ideale Wahl ist, um mit den neuesten Entwicklungen in der Anwendungsentwicklung Schritt zu halten. Außerdem werden neue Funktionen und Updates exklusiv für die neueste Version verfügbar sein, sodass Ihre Anwendungen die neuesten Innovationen und Verbesserungen nutzen können. Durch die Migration stellen Sie sicher, dass Ihre Projekte immer an der Spitze der Technologie bleiben und von laufenden Updates sowie den neuesten Entwicklungen im Ökosystem profitieren.

Durch die Portierung auf die neue Version profitieren Entwickler von laufenden Updates und Support, wodurch der Zugriff auf die neuesten Funktionen und Sicherheitsverbesserungen gewährleistet ist. Dieser Übergang stellt auch eine ausgezeichnete Gelegenheit dar, den Code zu refaktorisieren und zu optimieren, technische Schulden zu verringern und die Wartbarkeit zu verbessern. Insgesamt stellt der Wechsel zur neuesten Version sicher, dass Ihre Anwendungen wettbewerbsfähig, effizient und zukunftssicher bleiben.

 

2.  Bessere Leistung

 

Qt 6 führt bedeutende Leistungsverbesserungen im Vergleich zu Qt 5 ein, was es zu einem effizienteren und reaktionsfähigeren Framework für die moderne Anwendungsentwicklung macht. Eine der bedeutendsten Verbesserungen ist die Einführung des QRHI. Diese Abstraktionsschicht ermöglicht es Qt 6, die am besten geeignete Grafik-API für jede Plattform zu nutzen, was zu einer verbesserten Rendering-Leistung und Flexibilität führt. Im Gegensatz zu Qt 5, das stark auf OpenGL angewiesen war, stellt dieser Ansatz sicher, dass Animationen flüssiger sind und das Rendering, insbesondere bei Anwendungen mit komplexen grafischen Anforderungen, schneller erfolgt (Qt DevLifecycle) (Qt Wiki).

Darüber hinaus wurden Qt Quick und Qt Quick 3D in Qt 6 erheblich verbessert. Das Scenegraph in Qt Quick unterstützt jetzt mehrere Grafik-APIs, was zu besserer Leistung auf verschiedenen Plattformen führt. Qt Quick 3D profitiert von einem einheitlichen 2D-3D-Rendering-Ansatz, verbesserter Material- und Shader-Verarbeitung und besserer Integration mit dem zugrunde liegenden Grafikstack. Diese Verbesserungen führen zu einer effizienteren und leistungsfähigeren Rendering-Fähigkeit im Vergleich zu den Einschränkungen in Qt 5 (Qt Wiki) (Qt-Dokumentation).

Das Multimedia-Modul in Qt 6 wurde neu strukturiert, um eine bessere plattformübergreifende Unterstützung und optimierte Leistung zu bieten. Dies umfasst eine verbesserte Handhabung von Audio- und Video-Streams, eine geringere Latenz und eine effizientere Ressourcennutzung, was eine robustere Multimedia-Erfahrung als in Qt 5 ermöglicht (Qt Wiki) (Qt DevLifecycle). Diese umfassenden Leistungsverbesserungen machen Qt 6 zu einem leistungsfähigeren und effizienteren Framework, das sicherstellt, dass Anwendungen reaktionsschneller, skalierbarer und in der Lage sind, qualitativ hochwertige Benutzererlebnisse auf verschiedenen Plattformen und Geräten zu liefern.

 

3. Eine gute Gelegenheit, den Code zu refaktorisieren

 

Die Portierung Ihrer Anwendung von Qt 5 auf Qt 6 ist eine hervorragende Gelegenheit, Ihre Codebasis zu refaktorisieren, was erheblich dabei hilft, technische Schulden abzubauen. Wenn Softwareprojekte sich weiterentwickeln, sammeln sich häufig technische Schulden in Form von veralteten Code-Strukturen, ineffizienten Algorithmen und veralteten Bibliotheken an. Die Migration zu Qt 6, mit seiner modernisierten Architektur und verbesserten Leistungsmerkmalen, erfordert natürlicherweise, dass Sie Ihren bestehenden Code überarbeiten und aktualisieren. Dieser Prozess ermöglicht es Ihnen, redundante oder veraltete Codes zu identifizieren und zu eliminieren, Ihre Codebasis zu optimieren und effizientere und wartbarere Programmierpraktiken zu implementieren.

Die Refaktorisierung während des Portierungsprozesses stellt sicher, dass Ihre Anwendung nicht nur von den neuen Funktionen und Leistungsverbesserungen von Qt 6 profitiert, sondern auch robuster und leichter wartbar wird. Das Angehen von technischen Schulden in dieser Phase hilft, zukünftige Probleme zu vermeiden, verringert die Komplexität beim Hinzufügen neuer Funktionen und verbessert die allgemeine Qualität und Stabilität Ihrer Anwendung. Darüber hinaus bietet der Übergang eine perfekte Gelegenheit, moderne Programmierstandards und Best Practices zu übernehmen, sodass Ihre Anwendung auf einer soliden Grundlage aufgebaut wird, die sich an zukünftige technologische Fortschritte anpassen kann und Ihr Projekt für den langfristigen Erfolg und die Nachhaltigkeit vorbereitet.

 

Portierung von Qt-Anwendungen von Qt5 auf Qt6 Schritt für Schritt

 

 

1.  Bereiten Sie Ihre Codebasis vor

Aktualisieren Sie auf die neueste Qt 5-Version: Bevor Sie mit dem Portierungsprozess beginnen, stellen Sie sicher, dass Ihre Anwendung auf der neuesten Qt 5.15-Version basiert. Sie fragen sich vielleicht, warum. Diese Methode minimiert die Änderungen, die beim Wechsel zu Qt 6 erforderlich sind, aus folgenden Gründen:

  • Qt 5.15 ist die neueste Version von Qt 5 und enthält die geringste Anzahl an veralteten und obsoleten APIs im Vergleich zu früheren Versionen. Dies bedeutet, dass der Übergang zu Qt 6 weniger Änderungen erfordert und reibungsloser verläuft, da die APIs in Qt 5.15 denjenigen in Qt 6 näher kommen.

  • Qt 5.15 bietet eine Compiler-Warnung für die Deprecation von APIs, die in Qt 6 entfernt oder geändert werden. Indem Sie diese Warnungen in Qt 5.15 beheben, können Sie die meisten Breaking Changes bereits im Voraus behandeln, bevor Sie mit der eigentlichen Portierung beginnen.

  • Qt 5.15 enthält die neueste Funktionen, Fehlerbehebungen und Optimierungen, die in der Qt 5-Serie verfügbar sind. Dies stellt sicher, dass Ihre Anwendung so robust und aktuell wie möglich ist, bevor Sie auf Qt 6 wechseln, wodurch das Risiko von unerwarteten Problemen minimiert wird.

  • Viele APIs in Qt 5.15 sind so konzipiert, dass sie mit Qt 6 kompatibel sind. Diese bewusste Designentscheidung der Qt-Entwickler vereinfacht den Prozess, Ihren Code an die neue Version anzupassen.

Bereinigen Sie veraltete APIs: Entfernen oder ersetzen Sie die Nutzung von APIs, die zwar existieren, aber in Qt 5 als veraltet markiert wurden. Dies vereinfacht den Migrationsprozess, da diese APIs möglicherweise in Qt 6 entfernt wurden.

 

2.  Richten Sie Ihre Entwicklungsumgebung ein

Installieren Sie Qt 6: Laden Sie die neueste Version von Qt 6 über das Wartungs-Tool herunter und installieren Sie es.

 

3.  Aktualisieren Sie die Projektkonfiguration

CMake-Migration: Wenn Ihr Projekt qmake verwendet, konvertieren Sie die qmake-Projektdatei oder -dateien in CMake. Dazu gehört das Erstellen von CMakeLists.txt-Dateien und deren Konfiguration, um die Qt 6-Module zu finden und zu verwenden.

Aktualisieren Sie die Include-Pfade: Ändern Sie Ihre Include-Pfade von Qt 5 auf Qt 6-Module. Ersetzen Sie beispielsweise #include durch #include .

 

4.  Passen Sie den Code an die Änderungen in Qt 6 an

Führen Sie clazy-Checks aus: Setzen Sie alle clazy-Checks für die Qt 6-Portierung und führen Sie diese auf Ihrem Projekt aus. Weitere Details finden Sie in diesem Blogbeitrag: Portierung von Qt 5 auf Qt 6 mit clazy-Checks.

Ersetzen Sie entfernte APIs: Identifizieren und ersetzen Sie alle Qt 5-APIs, die in Qt 6 entfernt wurden, durch ihre neuen Äquivalente.

Anpassung an neue Modulstrukturen: Einige Module wurden in Qt 6 umstrukturiert oder umbenannt. Aktualisieren Sie Ihren Code, um die neuen Modulstrukturen zu verwenden.

Sie können auch die Qt5Compat-Bibliothek verwenden, die ein Modul enthält, das die in Qt 6 entfernten Qt 5 Core-APIs enthält. Weitere Informationen finden Sie im Qt-Blogbeitrag Portierung von Qt 5 auf Qt 6 mit der Qt5Compat-Bibliothek.

 

5.  Handhabung von Rendering-Änderungen

Nutzen Sie QRHI: Wenn Ihre Anwendung OpenGL verwendet, müssen Sie sie möglicherweise anpassen, um die Qt Rendering Hardware Interface (QRHI) zu nutzen, die mehrere Grafik-APIs unterstützt.

Aktualisieren Sie den Shader-Code: Wenn Ihre Anwendung benutzerdefinierte Shader verwendet, aktualisieren Sie diese, um mit der neuen einheitlichen Shader-Pipeline in Qt 6 kompatibel zu sein.

 

6.  Testen und Debuggen

Führen Sie Unit-Tests durch: Stellen Sie sicher, dass alle vorhandenen Tests bestehen und fügen Sie bei Bedarf neue Tests hinzu, um neue Qt 6-Funktionen abzudecken.

Grafische Tests: Überprüfen Sie, ob die grafische Ausgabe wie erwartet ist, insbesondere wenn Sie Änderungen am Rendering-Code oder an Shadern vorgenommen haben.

High-DPI-Unterstützung: Testen Sie Ihre Anwendung auf High-DPI-Displays, um sicherzustellen, dass Skalierung und Rendering korrekt behandelt werden.

 

7.  Leistungsoptimierung

Profilierung: Verwenden Sie Profiling-Tools in Qt Creator, um Leistungsengpässe in Ihrer Anwendung zu identifizieren und zu optimieren.

Speicherverwaltung: Überprüfen Sie auf Speicherlecks und optimieren Sie die Speichernutzung mit den verbesserten Speicherverwaltungsfunktionen in Qt 6.

 

8.  Dokumentation und Wartung

Aktualisieren Sie die Dokumentation: Stellen Sie sicher, dass Ihre Projektdokumentation aktualisiert wird, um die während der Portierung vorgenommenen Änderungen widerzuspiegeln.

Continuous Integration: Aktualisieren Sie Ihre CI/CD-Pipelines, um Qt 6 zu verwenden, damit Builds und Tests in der neuen Umgebung durchgeführt werden.

Wenn Sie diesen Schritten folgen, können Sie Ihre Qt 5-Anwendung erfolgreich auf Qt 6 portieren und von den neuesten Funktionen und Leistungsverbesserungen profitieren.

Für detailliertere Anleitungen und Beispiele sehen Sie sich den offiziellen Qt 6 Portierungsleitfaden und die Qt 5 auf Qt 6 Kompatibilitätsdokumentation an.

 

Was ist, wenn ich ein Projekt auf Basis von Yocto habe?

Wir sind mit dem Yocto-Projekt vertraut und haben einen Blogbeitrag (Yocto Linux – Erstellen Sie Ihre eigene Embedded Linux Distribution), in dem wir erklären, was das Yocto-Projekt ist und wie man eine Linux-Distribution selbst erstellt. Mit diesem Wissen können wir sagen, dass die Portierung einer Yocto-basierten Anwendung von Qt 5 auf Qt 6 nicht viel anders ist als bei einer regulären Anwendung. Hier sind einige zusätzliche Schritte, die zu beachten sind:

  1. Aktualisieren Sie Yocto-Rezepte: Wechseln Sie von der meta-qt5-Schicht zu meta-qt6, um Qt 6 zu unterstützen.

  2. Überprüfen Sie die Abhängigkeiten: Stellen Sie sicher, dass alle erforderlichen Bibliotheken für Qt 6 in Ihrem Yocto-Build enthalten sind.

  3. Testen: Testen Sie die Anwendung im neuen Build, um die Kompatibilität und Leistung sicherzustellen.

Diese Schritte helfen dabei, den Übergang zu Qt 6 in einer Yocto-basierten Umgebung reibungslos zu gestalten.

 

Scythe-Studio - Qt Developer

Mateusz Fejcher Qt Developer

Brauchen Sie Qt QML-Entwicklungsdienste?

service partner

Kommen wir zur Sache: Es ist eine Herausforderung, Top-Qt-QML-Entwickler zu finden. Helfen Sie sich selbst und starten Sie die Zusammenarbeit mit Scythe Studio – echten Experten im Qt C++ Framework.

Entdecken Sie unsere Fähigkeiten!

Neueste Artikel

[ 156 ]