# Qt5 zu Qt6 Migration - Statusbericht **Stand**: 2026-09-30 (Update 3) **Build-Konfiguration**: BUILD_RTI=OFF (DDS Code-Generierung deaktiviert) **Qt-Version**: 6.10.2 **C++ Standard**: C++17 (C++23 geplant, aber RTI 7.7 Inkompatibilität) **Submodule Branch**: feature/qt6-migration-basis-modules @ e75e6c25 --- ## 📊 Gesamtübersicht | Bereich | Status | Build (RTI=OFF) | Notes | |---------|--------|-----------------|-------| | **Lts/Common** | ✅ Vollständig | ✅ Erfolgreich | Basis-Module migriert | | **Lts/DDS** | 🟡 Struktur vorhanden | ⚠️ Stub-Header nötig | DDS-Code-Generator läuft nicht ohne RTI | | **Lts/Viewer** | 🟡 Teilweise | ⚠️ Fehlende Dependencies | LtsFileDialog ✅, LtsDataView ❌ | | **Lts/Plugins** | 🟡 Struktur vorhanden | ❌ Nicht getestet | 60 Untermodule | | **Lts/Services** | 🟡 Struktur vorhanden | ❌ Nicht getestet | 47 Untermodule | | **Lts/Projects** | 🟡 Struktur vorhanden | ❌ Nicht getestet | 5 Untermodule | | **Lts/Proxies** | 🟡 Struktur vorhanden | ❌ Nicht getestet | 13 Untermodule | | **TetraIF** | 🟡 Teilweise | ❌ Nicht getestet | Migration läuft | | **Z-Module** | 🟡 Teilweise | ⚠️ Include-Pfad Probleme | NGLLogger Pfad korrigieren | --- ## 🔍 Detailstatus pro Modul ### ✅ Erfolgreich migriert (BUILD_RTI=OFF) #### Lts/Common - **Status**: ✅ Vollständig migriert - **Build**: ✅ Erfolgreich - **Tests**: 1/1 bestanden - **Module**: - LtsUtils (Core, Settings, GuiConnectDialog) - LtsWidgets - LtsSession - LtsAppDescriptor - LtsPluginManager - LtsCommandLineParser #### Lts/Viewer/LtsFileDialog - **Status**: ✅ Header korrigiert (2026-08-29) - **Build**: ✅ Compiliert erfolgreich bis Linker - **Link**: ⚠️ Fehlende Dependencies (LtsDataView, svcFlmCommon, svcOpmCommon, svcExmCommon) - **Korrekturen (2026-08-29)**: - `flm_db.h` Stub-Header vervollständigt (alle Member-Variablen, Methoden, Initialisierung) - `flm_enums.hpp` Enums aus XML extrahiert (FileStatus, FileCategory, FileType, MainFolder) - `flm_translation.h` aktualisiert (toInt() entfernt, trFolderName() korrigiert) - `flm_ftc.h` minimaler Stub-Header erstellt - Plugin-Interfaces erstellt (flm, opm, exm data plugin interface) - QString/std::string Konvertierungen behoben in: - `lts_dialog_model_folder.cpp` - `lts_file_dialog_widget.cpp` - `lts_dialog_model_file.cpp` - Folder::name() Rückgabetyp: std::string (kompatibel) - FileContent: Alle benötigten Methoden implementiert (fileStatus, name, isTemplate, fileType, fileId, folderId, operatorId, mainFolder, exerciseId, properties, isDeleted, usedBy, lastModified, phaseId, isUsedBy, isHidden) - std::optional für exerciseId/phaseId unterstützt #### InfrastructureManagement - **Status**: ✅ ism_mounting_point.h migriert (2026-08-29) - **Korrekturen**: - Header von Qt5-Quellcode kopiert - Include-Pfade korrigiert (`#include "ismshared_export.h"` relativ) - Redundante Methodendefinitionen in `.cpp` entfernt ### ⚠️ Teilweise migriert / Build-Probleme #### Lts/Viewer/LtsDataView - **Status**: ❌ Nicht migriert (KRITISCH - Blocker) - **Problem**: Header-Datei fehlt (`LtsDataView/lts_data_view.h`) - **Lösung**: Modul muss migriert werden (HOCHPRIORITÄT - Blocker für LtsFileDialog) - **Dependencies**: Wird von LtsFileDialog, LtsSessionData benötigt #### Lts/Services/svcFlmCommon - **Status**: ❌ Nicht migriert (KRITISCH - Blocker) - **Problem**: Library fehlt im Linker - **Lösung**: Modul migrieren oder Stub erstellen (HOCHPRIORITÄT) - **Pfad**: `Lts/Services/FileManagement/svcFlmCommon/` #### Lts/Services/svcOpmCommon - **Status**: ❌ Nicht migriert (KRITISCH - Blocker) - **Problem**: Library fehlt im Linker - **Lösung**: Modul migrieren oder Stub erstellen (HOCHPRIORITÄT) - **Pfad**: `Lts/Services/OperatorManagement/svcOpmCommon/` #### Lts/Services/svcExmCommon - **Status**: ❌ Nicht migriert (KRITISCH - Blocker) - **Problem**: Library fehlt im Linker - **Lösung**: Modul migrieren oder Stub erstellen (HOCHPRIORITÄT) - **Pfad**: `Lts/Services/ExerciseManagement/svcExmCommon/` #### Lts/Services/InfrastructureManagement - **Status**: ⚠️ Include-Pfad Problem - **Problem**: `NGLLogger/Z/src/NGLLogger` Pfad existiert nicht - **Lösung**: CMakeLists.txt Include-Pfade korrigieren #### Lts/Services/ProjectDataManagement - **Status**: ⚠️ Enum-Wert fehlt - **Problem**: `L25_KindGuidingLine::nesA` existiert nicht - **Lösung**: Enum-Definition prüfen und ergänzen #### Z/src/NGLLogger - **Status**: ⚠️ Include-Pfad Problem - **Problem**: CMake generiert falschen Pfad `/repo/build-qt6-validation/Z/src/NGLLogger/Z/src/NGLLogger` - **Lösung**: CMakeLists.txt Include-Pfade korrigieren #### Lts/Tools/Adler/WebSocketSimulator - **Status**: ❌ QtWidgets Include fehlt - **Problem**: `#include ` wird nicht gefunden - **Lösung**: Qt6 Widgets Component explizit finden und verlinken --- ## 🛠️ Offene Aufgaben ### Hochprioritär (Blocker für LtsFileDialog Build) 1. ✅ **FileManagement Stub-Header vervollständigt** (2026-08-29) 2. ❌ **LtsDataView migrieren** - Wird von LtsFileDialog und anderen Modulen benötigt 3. ❌ **svcFlmCommon migrieren** - Service-Library für FileManagement Common 4. ❌ **svcOpmCommon migrieren** - Service-Library für OperatorManagement Common 5. ❌ **svcExmCommon migrieren** - Service-Library für ExerciseManagement Common ### Mittlere Priorität 6. ❌ **NGLLogger Include-Pfad** - CMakeLists.txt korrigieren 7. ❌ **ProjectDataManagement Enums** - Fehlende Enum-Werte ergänzen 8. ❌ **QtWidgets Includes** - Alle Qt6 Widgets Components explizit verlinken 9. ❌ **Lts/Plugins Kernmodule** - Priorisiere essentielle Plugins 10. ❌ **Lts/Services Basis** - InfrastructureManagement, OperatorManagement ### Niedrige Priorität 11. ❌ **Lts/Tools** - Adler WebSocket Simulator und andere Tools 12. ❌ **Vollständige Testabdeckung** - Tests für alle migrierten Module --- ## 📝 Build-Status (BUILD_RTI=OFF) ``` Configure: ✅ Erfolgreich (mit CMake-Warnings) Compile: ⚠️ 4/1187 Targets erfolgreich, dann Fehler (fehlende Dependencies) Link: ❌ Fehlende Libraries (LtsDataView, svcFlmCommon, svcOpmCommon, svcExmCommon) ``` ### Bekannte Warnungen - `QVariant::canConvert(int)` deprecated in Qt6 → zu `canConvert()` migrieren - NGLLogger Include-Pfad ungültig - AdvancedSymbology Viewer-Pfade in CMakeLists.txt entfernt --- ## 🔄 Nächste Schritte (Priorisiert) 1. **LtsDataView migrieren** (Blocker für LtsFileDialog) 2. **svcFlmCommon, svcOpmCommon, svcExmCommon** - Service-Stubs oder vollständige Migration 3. **NGLLogger CMakeLists.txt** korrigieren 4. **ProjectDataManagement Enums** vervollständigen 5. **QtWidgets Components** explizit verlinken in allen CMakeLists.txt --- ## 📌 Wichtige Dateien - `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_db.h` - DDS Stub-Header (2026-08-29 aktualisiert) - `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_enums.hpp` - Zentrale Enums - `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_translation.h` - Übersetzungen (2026-08-29 aktualisiert) - `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_ftc.h` - FTC Stub (2026-08-29 neu) - `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_data_plugin_interface.h` - Plugin Interface (2026-08-29 neu) - `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/OperatorManagement/opm_data_plugin_interface.h` - Plugin Interface (2026-08-29 neu) - `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/ExerciseManagement/exm_data_plugin_interface.h` - Plugin Interface (2026-08-29 neu) - `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/InfrastructureManagement/ism_mounting_point.h` - ISM Interface (2026-08-29 migriert) --- **Erstellt**: 2026-08-18 **Letzte Aktualisierung**: 2026-08-29 **Autor**: Migration Team --- ## 🎉 Update 2026-08-18: BUILD_RTI=OFF Build erfolgreich abgeschlossen ### Zusammenfassung - **Build-Status**: ✅ **1902/1902 Targets erfolgreich gebaut** - **Konfiguration**: BUILD_RTI=OFF (DDS-Stub-Implementierung) - **Qt-Version**: Qt 6.8.3 (Docker Ubuntu 26.04) - **C++ Standard**: C++23 ### Erstellte DDS-Stub-Header für BUILD_RTI=OFF | Header-Datei | Zweck | Status | |--------------|-------|--------| | `include/DDS/Generic/ddsgen_export.h` | Export-Makros (leer für OFF) | ✅ Fertig | | `include/DDS/Generic/generic_data_reader.h` | Data Reader Template-Stub | ✅ Fertig | | `include/DDS/Generic/generic_base.h` | Topic-Name-Templates, Helper-Funktionen | ✅ Fertig | | `include/DDS/Generic/generic_logger.h` | Logger-Wrapper mit DataType-Enum | ✅ Fertig | | `include/DDS/DTC/generic_dtc.h` | Minimale DDS-Typen für DTC | ✅ Fertig | ### Wichtige Code-Änderungen #### 1. QObject-Entfernung für BUILD_RTI=OFF - **DatabaseInterfaceImpl** (flm_db_impl.h): QObject-Basisklasse und Q_OBJECT-Makro entfernt - **DtcImpl** (opm_dtc_impl.h): Q_OBJECT-Makro entfernt, reine C++-Klasse - **Begründung**: Keine Qt-Signal/Slot-Mechanismen in DDS-freier Konfiguration benötigt #### 2. Logger-Stub-Implementierung ```cpp // NGL::Logger verwendet Qt-Logging statt NGL::LogStreamHelper class Logger { public: void logDebug(const std::string& msg) { qDebug() << msg.c_str(); } void logWarning(const std::string& msg) { qWarning() << msg.c_str(); } void logError(const std::string& msg) { qCritical() << msg.c_str(); } }; ``` #### 3. FileStatus als int-Alias ```cpp // Für BUILD_RTI=OFF: FileStatus als int-Alias statt enum class using FileStatus = int; constexpr int FileStatus_Valid = 0; constexpr int FileStatus_Deleted = 1; ``` #### 4. CMake: DDS-Bibliotheken conditional ```cmake if(BUILD_RTI) # Echte RTI-Bibliotheken else() # Leere INTERFACE-Libraries für BUILD_RTI=OFF add_library(ddsc INTERFACE) add_library(ddscore INTERFACE) # ... weitere DDS-Libraries endif() ``` #### 5. Qt6/C++23 Updates - **std::optional**: `is_set()` → `has_value()`, `get()` → `value()` - **Container**: QList → std::vector mit expliziter Konversion - **qAsConst**: Fix für rvalue expressions (z.B. `user.exerciseIds()`) ### Test-Status | Test | BUILD_RTI=ON | BUILD_RTI=OFF | |------|--------------|---------------| | Lts/Common | ✅ 1/1 bestanden | ⚠️ Nicht ausführbar (DDS-Dependency) | | DDS-Tests | ✅ Verfügbar | ❌ Nicht verfügbar (kein RTI) | | Gesamt-Build | ✅ 1902 Targets | ✅ 1902 Targets | ### Bekannte Einschränkungen (BUILD_RTI=OFF) 1. **Keine DDS-Funktionalität**: Data Reader, Topics, TypeSupport nur als Stubs 2. **Tests nicht ausführbar**: Die meisten Tests benötigen DDS-Backend 3. **Code-Generator**: ddsgen läuft nicht ohne RTI Connext Installation ### Nächste Schritte 1. **BUILD_RTI=ON testen**: Vollständige Validierung mit RTI Connext DDS 2. **Test-Suite**: Alle Unit-Tests mit DDS-Backend ausführen 3. **Restliche Module**: Lts/Plugins, Lts/Services, Lts/Proxies, Lts/Projects migrieren 4. **C++23 Features**: Weitere Modernisierung wo sinnvoll ---