Qt6 Migration: Merge latest Qt5 devel content and apply migration fixes

- Merged 292 changed files from dlbo snapshot
- Fixed IDL enum collisions (PortType, PdmEventType)
- Fixed Grantlee template for C++11 scoped enums
- Fixed CMake VERSION_GREATER syntax
- Added missing directories (THP, LtsRestClient, etc.)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
torstenandCopilot committed 2026-09-15 18:20:51 +00:00
1 parent c9e245a211
commit 3028302f7b
310 files changed
+2823 -740

No files matched your search

+112
View File
@@ -0,0 +1,112 @@
#include <QApplication>
#include <QDebug>
#include <QDir>
#include <QMainWindow>
#include <QMap>
#include <QPluginLoader>
#include <QVBoxLayout>
#include "../interfaces/child_interface.h"
#include "../interfaces/parent_interface.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow mainWindow;
QWidget *centralWidget = new QWidget(&mainWindow);
QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget);
mainWindow.setCentralWidget(centralWidget);
// Ordnerstruktur auflösen (.../build-.../plugins/)
QDir baseDir(QCoreApplication::applicationDirPath());
baseDir.cdUp();
QDir pluginsDir = baseDir;
if (!pluginsDir.cd(QStringLiteral("plugins")))
{
qCritical() << "Plugins-Ordner nicht gefunden!";
return -1;
}
QMap<QString, ParentInterface *> parentPlugins;
QList<ChildInterface *> childPlugins;
// Nur .so-Dateien auflisten (verhindert das Einlesen von cmake_install.cmake)
QStringList filters;
filters << QStringLiteral("*.so");
#ifdef Q_OS_WIN
filters << QStringLiteral("*.dll");
#else
filters << QStringLiteral("*.so");
#endif
// 1. Durchlauf: Plugins laden und katalogisieren
for (const QString &fileName : pluginsDir.entryList(filters, QDir::Files))
{
QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
QObject *pluginInstance = loader.instance();
if (!pluginInstance)
{
qDebug() << "Überspringe Datei:" << fileName << loader.errorString();
continue;
}
// Ist es ein Parent?
auto *parent = qobject_cast<ParentInterface *>(pluginInstance);
if (parent)
{
parentPlugins[parent->pluginName()] = parent;
mainLayout->addWidget(parent->widget());
qDebug() << "Eltern-Plugin registriert:" << parent->pluginName();
continue;
}
// Ist es ein Child?
auto *child = qobject_cast<ChildInterface *>(pluginInstance);
if (child)
{
childPlugins.append(child);
qDebug() << "Kind-Plugin zwischengespeichert:" << child->childName();
}
}
// 2. Durchlauf: Zuordnen, Daten übergeben und Signale verbinden
for (ChildInterface *child : childPlugins)
{
QString target = child->targetParentName();
if (parentPlugins.contains(target))
{
ParentInterface *parent = parentPlugins[target];
// A. Widget zuweisen
parent->addChildWidget(child->widget());
qDebug() << "Kind" << child->childName() << "wurde" << target << "zugeordnet.";
// B. Initiale Parameterübergabe
child->setParentData(QStringLiteral("Konfig-Paket via %1").arg(parent->pluginName()));
// C. Dynamische Signal-Slot Live-Verbindung (Absturzsicher via Pointer-Check)
QObject *parentObj = parent->qobjectInstance();
QObject *childObj = dynamic_cast<QObject *>(child);
if (parentObj && childObj)
{
bool connected = QObject::connect(parentObj, SIGNAL(dataChangedLive(QString)), childObj, SLOT(updateLiveData(QString)));
if (connected)
qDebug() << "Live-Signal verbunden für:" << child->childName();
else
qWarning() << "Verbindung fehlgeschlagen für:" << child->childName();
}
else
qWarning() << "Fehler beim Casten des Plugins" << child->childName() << "zu QObject!";
}
else
qDebug() << "Warnung: Kein Parent gefunden für" << child->childName();
}
mainWindow.resize(500, 450);
mainWindow.show();
return app.exec();
}