In das .pro file des statischen plugins muss folgendes rein:
Die Klassendefinition erfolgt genau gleich wie bei einem shared lib plugin:
class ExamplePlugin : public QObject, PluginInterface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "hb9hei.example.plugin" FILE "resources/plugin-metadata.json")
Q_INTERFACES(PluginInterface)
public:
explicit ExamplePlugin();
~ExamplePlugin();
...
}
In das Projekt welches das statische plugin verwendet muss folgendes ins .pro file:
Bei der Klassenedfinition muss genau wie beim shared lib plugin folgendes ins .h
QT_FORWARD_DECLARE_CLASS(PluginInterface)
In der Datei, welche das Plugin verwendet, muss jenes hin:
Q_IMPORT_PLUGIN(ExamplePlugin)
Wichtig ist dabei, den Namen der Klasse (welche das plugin implementiert) zu verwenden, und NICHT den Dateinamen der Library.
Laden kann man solch ein statisches plugin dann so:
PluginInterface* PluginManager::load_static_stub()
{
QVector<QStaticPlugin> static_plugins = QPluginLoader::staticPlugins();
QVector<QStaticPlugin>::const_iterator itr;
for (itr = static_plugins.constBegin(); itr != static_plugins.constEnd(); ++itr) {
QStaticPlugin plug = *itr;
qDebug() << plug.metaData().value("IID").toString();
if (plug.metaData().value("IID").toString() == "hb9hei.example.plugin") {
qDebug() << "loading static catdev stub";
PluginInterface* catdev = qobject_cast<PluginInterface*>(plug.instance());
if (catdev) {
qDebug() << "cast successful";
return catdev;
}
return nullptr;
}
}
qDebug() << "----- end of list -----";
return nullptr;
}