naresh
3rd August 2006, 13:24
Hi there! I'm trying to play with plugins for my app...
here is some code:
plugin interface:
#ifndef PLUGINIF_H
#define PLUGINIF_H
class PluginInterface {
public:
virtual ~PluginInterface() {}
virtual QString version();
virtual QString author();
virtual QString description();
virtual QString name();
};
Q_DECLARE_INTERFACE(PluginInterface, "Qxygen.PluginInterface")
#endif
plugin header:
#ifndef PLUGIN_H
#define PLUGIN_H
#include <QObject>
#include <pluginif.h>
class plugin: public QObject, public PluginInterface {
Q_OBJECT
Q_INTERFACES(PluginInterface)
public:
QString author();
QString version();
QString description();
QString name();
};
#endif
plugin implementation:
#include <QtPlugin>
#include "plugin.h"
QString plugin::author() {
return "Naresh";
}
QString plugin::version() {
return "0.0.1";
}
QString plugin::description() {
return "plugin descr";
}
QString plugin::name() {
return "plugin";
}
Q_EXPORT_PLUGIN2(my_plugin, plugin)
here is plugin loading loop:
QDir dir( QCoreApplication::applicationDirPath()+"/plugins/" );
QStringList fileNames=dir.entryList( QStringList("*.so"), QDir::Files, QDir::Name);
foreach( QString fileName, fileNames ) {
qDebug()<<dir.absoluteFilePath(fileName); // returns proper path everytime
QPluginLoader loader( dir.absoluteFilePath(fileName) );
QObject *plugin=loader.instance();
if ( plugin ) {
PluginInterface *plif=qobject_cast<PluginInterface*>( plugin );
QStringList values;
values<< plif->name() << plif->version();
new QTreeWidgetItem( ui.pluginList, values );
}
qDebug()<<loader.isLoaded(); // always return false
}
project file looks like this:
TEMPLATE = lib
CONFIG += plugin release
INCLUDEPATH += ../interfaces
TARGET = ../../plugins/plugin
VERSION=0.0.1
HEADERS = \
plugin.h
SOURCES = \
plugin.cpp
As you can see in comments... plugin loading loop always return false for isLoaded and never loads plugin... and path it uses always is proper... any ideas?
here is some code:
plugin interface:
#ifndef PLUGINIF_H
#define PLUGINIF_H
class PluginInterface {
public:
virtual ~PluginInterface() {}
virtual QString version();
virtual QString author();
virtual QString description();
virtual QString name();
};
Q_DECLARE_INTERFACE(PluginInterface, "Qxygen.PluginInterface")
#endif
plugin header:
#ifndef PLUGIN_H
#define PLUGIN_H
#include <QObject>
#include <pluginif.h>
class plugin: public QObject, public PluginInterface {
Q_OBJECT
Q_INTERFACES(PluginInterface)
public:
QString author();
QString version();
QString description();
QString name();
};
#endif
plugin implementation:
#include <QtPlugin>
#include "plugin.h"
QString plugin::author() {
return "Naresh";
}
QString plugin::version() {
return "0.0.1";
}
QString plugin::description() {
return "plugin descr";
}
QString plugin::name() {
return "plugin";
}
Q_EXPORT_PLUGIN2(my_plugin, plugin)
here is plugin loading loop:
QDir dir( QCoreApplication::applicationDirPath()+"/plugins/" );
QStringList fileNames=dir.entryList( QStringList("*.so"), QDir::Files, QDir::Name);
foreach( QString fileName, fileNames ) {
qDebug()<<dir.absoluteFilePath(fileName); // returns proper path everytime
QPluginLoader loader( dir.absoluteFilePath(fileName) );
QObject *plugin=loader.instance();
if ( plugin ) {
PluginInterface *plif=qobject_cast<PluginInterface*>( plugin );
QStringList values;
values<< plif->name() << plif->version();
new QTreeWidgetItem( ui.pluginList, values );
}
qDebug()<<loader.isLoaded(); // always return false
}
project file looks like this:
TEMPLATE = lib
CONFIG += plugin release
INCLUDEPATH += ../interfaces
TARGET = ../../plugins/plugin
VERSION=0.0.1
HEADERS = \
plugin.h
SOURCES = \
plugin.cpp
As you can see in comments... plugin loading loop always return false for isLoaded and never loads plugin... and path it uses always is proper... any ideas?