Projet

Général

Profil

Utiliser un plugin

Note: cette documentation est encore en cours de rédaction, il se peut qu'il y ait encore des erreurs et des choses qui ne marchent pas, en particulier pour les plates formes non linux pour lesquelles je n'ai encore rien testé de tout ça !

Pour utiliser un plugin développé par un tiers il faut:
  • le plugin :) à placer dans un dossier "plugins" du projet, il s'agit d'un fichier .so.
  • un fichier de description de ce que fait le plugin : l'interface c'est un fichier ".h" tout classique

Modification du main.cpp de votre projet

Pour que votre projet puisse charger des plugins il faut modifier le fichier main.cpp:

  • ajouter en entête (sauf si déjà présent)
    #include <QtPlugin>
    #include <QDir>
    #include <QDebug>
    #include <QPluginLoader>
    #include <QMessageBox>
    #include "fichier_interface_du_plugin.h" 
    
  • ajouter une fonction de chargement dynamique de plugins
    bool loadPlugin()
    {
        qDebug() << "Chargement du plugin ... ";
    
        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)) {
            qDebug() << "Chargement du plugin " << fileName;
            QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
            QObject *plugin = pluginLoader.instance();
            qDebug() << "Chargement du plugin (2)" << plugin;
            if (plugin) {
                qDebug() << "Chargement du plugin " << fileName << " réussi";
               return true;
            }
        }
    
        return false;
    }
    
  • dans la fonction main un simple appel à cette fonction de chargement de plugins
        if (!loadPlugin()) {
            QMessageBox::information(0, "Error", "Could not load the plugin");
        }
    
Redmine Appliance - Powered by TurnKey Linux