# 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 - [x] Docker-Build-Infrastructure validiert - [x] CMake-Cache-Permission-Problem behoben (als root löschen) - [x] CMake-Konfiguration erfolgreich abgeschlossen - [x] NGLLogger Export-Macro konfiguriert - [x] 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 - [x] Export-Macro konfiguriert (generate_export_header) - [x] AUTOUIC_SEARCH_PATHS für Ui-Verzeichnis hinzugefügt - [x] BUILD_RTI-Guard entfernt (immer benötigtes Target) - [x] Target-Abhängigkeit für Tests hinzugefügt - [x] Include-Pfad in test_abstracttimelinemodel.cpp korrigiert ### 4. NGLLogger Integration - [x] Export-Macro Include-Pfad im Haupt-CMakeLists.txt (`${CMAKE_BINARY_DIR}/Z/src/NGLLogger`) - [x] Source-Pfad zu globalen Include-Pfaden hinzugefügt - [x] Include-Pfad korrigiert: `` (nicht ``) - [x] 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**: - [x] test_event.cpp (2 Tests: DurationCalculation, VisibilityToggle) - [x] test_eventgraphic.cpp (3 Tests) - [x] test_eventtools.cpp (2 Tests) - [x] test_eventlist.cpp (3 Tests, 6 Constructor-Aufrufe) **Constructor-Signatur**: ```cpp 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 - [x] Include-Pfad: `LtsUtilsCore/data_modification_enum.h` → `LtsUtils/LtsUtilsCore/data_modification_enum.h` - [x] test_item.cpp: Include für gna_dtc.h hinzugefügt - [x] **operator<< ambiguous overload Fix**: friend-Deklaration in NasatAircraft und NasatAircraftParticipant - [x] operator<< aus globalem Scope in Namespace GuezNasat verschoben (ADL-konform) ### 8. Enum- und Type-Fixes - [x] avm_enums.hpp: `#include ` für int32_t - [x] test_asm_enums.cpp: enum class Vergleiche mit static_cast - [x] 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_LIBRARY` auf `NGL_ADD_LIBRARY2` konvertiert - 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 `svcFltClient` ab - svcFltClient wird nur mit BUILD_RTI=ON gebaut - RTI Connext ist in Ubuntu 26.04 nicht installiert **Lösungsoptionen**: 1. RTI Connext in Docker-Image installieren (aufwändig, Lizenz) 2. BUILD_RTI=OFF und FilterManagement-Plugins temporär deaktivieren 3. 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 1. **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 2. **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/` 3. **./rpmbuild und ./jenkins migrieren** - Von openSUSE nach Ubuntu 26.04 - Dockerfiles anpassen - Jenkins-Pipelines aktualisieren 4. **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.