QT application: mehrere Plugins pro Interface



  • Hallo,

    ich beschäftige mich zur Zeit mit Qt und der Erstellung von eigenen Plugins.
    Ich habe das Echoplugin erfolgreich umgesetzt und auch schon ein plugin mit eigenem Interface für mein programm erstellt. Funktioniert alles bestens.

    Hilfe benötige ich für die Verwaltung der einzelnen plugins.
    Mein Programm erstellt aus verschiedenen Daten mit Hilfe von Postprozessoren einen speziellen Quellcode.
    Die Postprozessoren möchte ich flexibel als plugin/dll einbinden. Somit kann ich immer mehr Prozessoren integrieren,ohne jedes mal das ganze Programm neu zu
    bauen.

    -                             Postprozessor 1 
    -Datenwidget --> Selector --> Postprozessor 2  --> Textwidget mit dem Code
    -                             Postprozessor 3
    

    Alle Postprozessoren verwenden das gleiche Interface.
    Der jeweilige Postprozessor wird in einer Combobox ausgewählt.

    Wie muss ich die einzelnen Plugins/Postprozessoren verwalten, so dass dass ich mit meiner Combobox als selector zwischen Ihnen wechseln kann?

    Mein bisher noch einzelnes Plugin wird wie in dem Echoplugin Beispiel geladen:

    bool mainwindow::loadPlugin()
     {
         QDir pluginsDir(qApp->applicationDirPath());
     #if defined(Q_OS_WIN)
         if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release")
             pluginsDir.cdUp();
     #elif defined(Q_OS_MAC)
         if (pluginsDir.dirName() == "MacOS") {
             pluginsDir.cdUp();
             pluginsDir.cdUp();
             pluginsDir.cdUp();
         }
     #endif
         pluginsDir.cd("plugins");
         foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
             QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
             QObject *plugin = pluginLoader.instance();
             if (plugin) {
                 postprozInterface = qobject_cast<PostprozInterface *>(plugin);
                 if (PostprozInterface)
                     return true;
             }
         }
    
         return false;
     }
    


  • Ganz einfach in dem du das QObject* , welches du vom plugin loader bekommst in z.b. in einem dictionary speicherst. Und als key könntest du einen identifier verwenden, welcher von dem jeweiligen plugin geliefert werden muss.


Anmelden zum Antworten