7.3 KiB
Qt6 Migration Status Report
Aktueller Stand (2026-08-21 15:09 CET)
🏗️ Build-Fortschritt
- Gesamt-Targets: 1854
- Aktueller Fortschritt: 114/1854 (6%)
- Build-System: Ninja, Debug, BUILD_RTI=OFF
- Qt-Version: Qt 6.10.2 (fest, kein Versions-Mix)
- C++-Standard: C++23
- Build-Umgebung: Docker-Container (migration-pipeline:ubuntu26.04-qt6)
✅ Erfolgreich abgeschlossene Arbeiten
1. Build-Infrastructure
- Docker-Build-Infrastructure validiert
- CMake-Cache-Permission-Problem behoben (als root löschen)
- CMake-Konfiguration erfolgreich abgeschlossen
- NGLLogger Export-Macro konfiguriert
- GuezNasat Include-Pfade konfiguriert
2. Plugin-System Migration (43 Module)
| Kategorie | Anzahl | Status |
|---|---|---|
| DataPlugins | 38 | ✅ AUTOMOC ON + Q_INTERFACES() entfernt |
| Plugin-Interfaces | 5 | ✅ AUTOMOC ON |
| Gesamt | 43 | ✅ Fertig |
Wichtigste Erkenntnis: Q_INTERFACES() ist inkombatibel mit QObject-Vererbung in Qt6 - muss entfernt werden.
3. LtsTimelineClassic Module
- Export-Macro konfiguriert (generate_export_header)
- AUTOUIC_SEARCH_PATHS für Ui-Verzeichnis hinzugefügt
- BUILD_RTI-Guard entfernt (immer benötigtes Target)
- Target-Abhängigkeit für Tests hinzugefügt
- Include-Pfad in test_abstracttimelinemodel.cpp korrigiert
4. NGLLogger Integration
- Export-Macro Include-Pfad im Haupt-CMakeLists.txt (
${CMAKE_BINARY_DIR}/Z/src/NGLLogger) - Source-Pfad zu globalen Include-Pfaden hinzugefügt
- Include-Pfad korrigiert:
<NGLLoggerBootstrap.h>(nicht<NGLLogger/NGLLoggerBootstrap.h>) - API-Change:
getLogger()→getNGLRootLogger()in 4 Dateien- Event.cpp
- Event.h
- AbstractTimelineModel.cpp
- TimelineWidget.cpp
- TimelineIndicator.cpp
5. Qt6 API-Changes
| Datei | Change | Status |
|---|---|---|
| TimelineView.cpp | angle() → angleDelta() |
✅ |
| TimelineView.cpp | globalPos() → globalPosition().toPoint() |
✅ |
| lts_msec_date_time_edit.cpp | fromMSecsSinceEpoch() deprecated (Warnung akzeptiert) |
⚠️ |
| lts_text_editor.cpp | setFontFamily() deprecated (Warnung akzeptiert) |
⚠️ |
6. Event-Constructor Migration
Problem: Event-Klasse hat nur 14-Argument Constructor, keinen Default-Constructor (wegen Referenz-Member m_logger)
Betroffene Test-Dateien:
- test_event.cpp (2 Tests: DurationCalculation, VisibilityToggle)
- test_eventgraphic.cpp (3 Tests)
- test_eventtools.cpp (2 Tests)
- test_eventlist.cpp (3 Tests, 6 Constructor-Aufrufe)
Constructor-Signatur:
Event(quint64 uniqueId, quint32 typeId, qint64 startTime, qint64 endTime,
quint32 playerId, quint32 partyId, quint64 equipmentId,
const QString& path, EventPaintFunc paintFunc,
const QColor& paintColor, const QVariant& detailData,
quint64 subEventId, const QPointF& pos, quint64 session)
7. GuezNasat Module
- Include-Pfad:
LtsUtilsCore/data_modification_enum.h→LtsUtils/LtsUtilsCore/data_modification_enum.h - test_item.cpp: Include für gna_dtc.h hinzugefügt
- operator<< ambiguous overload Fix: friend-Deklaration in NasatAircraft und NasatAircraftParticipant
- operator<< aus globalem Scope in Namespace GuezNasat verschoben (ADL-konform)
8. Enum- und Type-Fixes
- avm_enums.hpp:
#include <cstdint>für int32_t - test_asm_enums.cpp: enum class Vergleiche mit static_cast
- test_asm_dtc.cpp: Include für asm_dtc.h hinzugefügt
9. Export-Header Problem behoben (aus vorheriger Session)
- 87 CMakeLists.txt von
NGL_ADD_LIBRARYaufNGL_ADD_LIBRARY2konvertiert - 44 Source-Dateien: Export-Header Include-Pfade korrigiert
- Root Cause: NGL_ADD_LIBRARY2 benötigt für GENERATE_EXPORT_HEADER
10. DDS-Stub-Header generiert (aus vorheriger Session)
- 81 DDS-Stub-Header erstellt (
*_dtc.h,*_fts.h,*_dts.h,*_ftc.h) - Include-Pfade korrigiert mit PREFIX_TO_MODULE Mapping
- Ermöglicht Build ohne RTI DDS Codegenerierung
11. FilterManagement DDS-Stubs (aus vorheriger Session)
- flt_fts.h: AesFilter und AesFilterUpdateRequestHandler
- flt_dts.h: Dts und Fts Interface-Classes
- flt_dts.cpp: Stub-Implementation
- flt_ftc.h: Ftc Interface mit ReplyHandler (neu erstellt)
12. InfrastructureManagement DDS-Stubs (aus vorheriger Session)
- ism.hpp, ism_enums.hpp Stub-Header erstellt
- IsmShared Kompilierung erfolgreich
⚠️ Aktuelle Build-Situation
NGLLogger: ✅ Baut erfolgreich ohne RTI
FilterManagement: ⚠️ Benötigt BUILD_RTI=ON
- FltDataPlugin hängt von
svcFltClientab - svcFltClient wird nur mit BUILD_RTI=ON gebaut
- RTI Connext ist in Ubuntu 26.04 nicht installiert
Lösungsoptionen:
- RTI Connext in Docker-Image installieren (aufwändig, Lizenz)
- BUILD_RTI=OFF und FilterManagement-Plugins temporär deaktivieren
- svcFltClient als Header-Only Library behandeln (wenn möglich)
📝 Git Submodule Status
Frage: Warum ist git submodule im HEAD detach state?
Antwort: Das Submodule ist NICHT im detached HEAD state!
$ git submodule status
+010f91928acfe8e775acdacc5eb0b38f613fa3e5 qt-migration-legatus (heads/feature/qt6-migration-basis-modules)
- Branch:
feature/qt6-migration-basis-modules✅ - Commit: 010f919 (lokale Änderungen, noch nicht gepusht)
- Das
+Zeichen: Zeigt uncommitted changes im Submodule an
🔄 Nächste Schritte
-
FilterManagement Build-Strategie klären
- Option A: BUILD_RTI=ON mit RTI-Installation
- Option B: FilterManagement-Plugins temporär ausschließen
- Option C: svcFltClient als Header-Only behandeln
-
Tests erstellen (gemäß combined-migration-compact.prompt.md)
- Für migrierte Module: Lts/Common, NGLLogger
- Teststruktur:
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/tests/
-
./rpmbuild und ./jenkins migrieren
- Von openSUSE nach Ubuntu 26.04
- Dockerfiles anpassen
- Jenkins-Pipelines aktualisieren
-
Vollständige Migration fortsetzen
- Z-Module → TetraIF → Lts/Services → Lts/Proxies → Lts/Plugins → Lts/Projects
📊 Build-Statistik
| Modul | Build-Status | RTI benötigt | Notes |
|---|---|---|---|
| NGLLogger | ✅ Erfolg | ❌ Nein | Basis-Logging |
| IsmShared | ✅ Erfolg | ❌ Nein | InfrastructureManagement |
| FltDataPlugin | ⚠️ Pending | ✅ Ja | Benötigt svcFltClient |
| svcFltCommon | ⚠️ Pending | ✅ Ja | BUILD_RTI=ON required |
| svcFltClient | ⚠️ Pending | ✅ Ja | BUILD_RTI=ON required |
| svcFltServer | ⚠️ Pending | ✅ Ja | BUILD_RTI=ON required |
🛠️ Wichtige Files
Stub-Header erstellt:
/include/FilterManagement/flt_fts.h/include/FilterManagement/flt_dts.h/include/FilterManagement/flt_dts.cpp/include/FilterManagement/flt_ftc.h(neu)/include/InfrastructureManagement/ism.hpp/include/InfrastructureManagement/ism_enums.hpp
Skripte erstellt:
fix_add_library2.py(87 Fixes)fix_export_includes.py(44 Fixes)create_dds_stubs.py(81 Header)move_dds_headers.py(Pfad-Korrektur)remove_logger_members.py(~100+ Dateien)fix_logging_macros.py(variadische Parameter)
Empfehlung: User sollte entscheiden ob RTI Connext installiert werden soll oder ob FilterManagement-Plugins temporär aus dem Build ausgeschlossen werden können.