Как я понимаю, у вас есть что-то подобное (если вы этого не сделаете, подумайте о рефакторинге, чтобы сделать это так)
struct IBase
{
virtual QString name() const = 0;
virtual void setName(const QString name&) = 0;
};
Q_DECLARE_INTERFACE(IBase, "best.app.ever.plugins.base");
struct IFoo
{
virtual void foo() = 0;
};
Q_DECALRE_INTERFACE(IFoo, "best.app.ever.plugins.foo" );
struct Plugin: QObject, IBase, IFoo
{
Q_OBJECT()
Q_INTERFACES(IBase)
Q_INTERFACES(IFoo);
//....
};
Q_EXPORT_PLUGIN2(best_app_ever, Plugin);
теперь, когда вы загружаете плагин, вы получаете QObject
, и вы shoud используете qobject_cast
для приведения этого QObject
к вашим интерфейсным классам.
Специализации qobject_cast
, которые обрабатывают приведение к вашим интерфейсам, автоматически создаются макросами Q_DECLARE_INTERFACE
.