> On Aug 7, 2015, at 5:39 PM, Andrey Poltavets <[email protected]>
> wrote:
>
> Not sure what you mean with that.
> I misled you. I mean in my app I've launched instance of QtC's PluginManager
> and load my plugin to it. Now I need to investigate how can I use API of my
> plugin by PluginManager instance.
So, if I understand you correctly, you have an application, and want to make it
possible to extend your application by plugins, and try to use Qt Creator’s
plugin manager for that?
But then I do not know what you mean with "I don't thinks so, because there are
only few plugins with macro Q_INVOKABLE in QtC's sources.”
Several possibilities for that case though. Usually your application would
provide exported API for plugins, and plugins link against a corresponding
library from the app and use that.
E.g.
-----
App provides mehtods that can be used by plugins:
class APP_EXPORT MyAppPluginAPI {
public:
static void doSomethingInApplication();
};
Plugin calls MyAppPluginAPI::doSomethingInApplication() at some point.
-----
App provides an interface that plugins can implement:
class APP_EXPORT SomeInterface {
public:
static void registerSomeInterface(SomeInterface *impl);
virtual void doSomething() = 0;
virtual RetValue getSomething() = 0;
};
Plugins implement that interface, and in e.g. IPlugin::initialize do
SomeInterface::registerSomeInterface(new MyPluginsSomeInterfaceImpl);
-----
Or the same, but using the plugin manager object pool (<-- possible performance
issues there!)
App provides an interface that plugins can implement:
class APP_EXPORT SomeInterface : public QObject {
public:
virtual void doSomething() = 0;
virtual RetValue getSomething() = 0;
};
Plugins implement that interface, and put an instance in the object pool in
IPlugin::initialize
addAutoreleasedObject(new MyPluginsSomeInterfaceImpl);
The app gets the implementations and does something on them some time after
loading plugins
foreach (SomeInterface *impl, PluginManager::getObjects<SomeInterface>())
impl->doSomething();
Here you can avoid the link dependency on your plugin by using
Q_DECLARE_INTERFACE
-----
The app provides specialized plugin interfaces
class APP_EXPORT SpecializedPluginInterface : public ExtensionSystem::IPlugin {
public:
[....]
virtual void doSomething() = 0;
virtual RetValue getSomething() = 0;
};
Plugins can be of that type instead of just IPlugin, and the application calls
methods on them with something like
foreach (PluginSpec *spec, PluginManager::plugins())
if (auto specialPlugin = qobject_cast<SpecializedPluginInterface
*>(spec->plugin()))
specialPlugin->doSomething();
-----
ES::invoke is also possible, but error prone.
Br, Eike
> 2015-08-07 17:19 GMT+03:00 Ziller Eike <[email protected]>:
>
> > On Aug 7, 2015, at 1:17 PM, Andrey Poltavets <[email protected]>
> > wrote:
> >
> > Hello.
> > How to invoke method from plugin?
> > I have two suggestions:
> > 1) function ExtensionSystem::invoke ? I don't thinks so, because there are
> > only few plugins with macro Q_INVOKABLE in QtC's sources.
> > 2) public slot PluginManager::remoteArguments ?
>
>
>
> > I already have launched and loaded my plugin in insular instance of
> > PluginManager.
>
> Not sure what you mean with that.
>
> > Now I need to investigate how to invoke a method. Please don't open all the
> > cards for my fun, just give me a hint. :)
>
> Make your plugin depend on the other plugin (QTC_PLUGIN_DEPENDS) and use that
> plugin’s API directly.
>
> Br, Eike
>
> --
> Eike Ziller, Senior Software Engineer - The Qt Company GmbH
>
> The Qt Company GmbH, Rudower Chaussee 13, D-12489 Berlin
> Geschäftsführer: Mika Pälsi, Juha Varelius, Tuula Haataja
> Sitz der Gesellschaft: Berlin, Registergericht: Amtsgericht Charlottenburg,
> HRB 144331 B
>
>
>
>
> --
> Respectfully,
> Andrey Poltavets
--
Eike Ziller, Senior Software Engineer - The Qt Company GmbH
The Qt Company GmbH, Rudower Chaussee 13, D-12489 Berlin
Geschäftsführer: Mika Pälsi, Juha Varelius, Tuula Haataja
Sitz der Gesellschaft: Berlin, Registergericht: Amtsgericht Charlottenburg, HRB
144331 B
_______________________________________________
Qt-creator mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/qt-creator