[Qt-creator] Couple of questions about the design of Qt Creator

Elvis Stansvik elvstone at gmail.com
Sun Sep 10 11:31:58 CEST 2017

2017-09-10 11:03 GMT+02:00 Elvis Stansvik <elvstone at gmail.com>:
> Hi all,
> In a quest to find inspiration for good Qt application architectures,
> I've been looking at the plugin based one you're using in Qt Creator.
> It strikes me as a really nice design.
> I've been reading the available docs on it, and dug into the code a
> bit. This may be a bit much to ask, but I was wondering if any of you
> devs could answer a few questions that popped up? It would be much
> appreciated!
> It's really just two questions, about two different topics:
> 1. The Invoker / invoke<...> Thingie:
> You have ExtensionSystem::Invoker and the associated invoke<..>
> helper, which are syntactic sugar for achieving "soft" extension
> points. It seems it's not used that much (?). I grepped for
> "Invoker|invoke<" in the code and could only find a few uses of it. I
> also grepped for "invokeMethod" to see if the approach was being used
> "manually" so to speak (without the sugar), and found a few more hits.
> What was the motivation for adding this? I assume it's for cases where
> you want a looser coupling between plugins (no linking, no shared
> header), but can you give an example of when you really wanted that
> looser coupling and why?
> 2. The Plugin System in General:
> Is there anything about the plugin system in its current form, or how
> it is used, that you would do fundamentally different if you could do
> it all over again? Any areas that you find messy/awkward, that need a
> re-think/makeover? In short: What are the biggest warts in the code in
> your opinion?

As soon as I hit send, I realized I have a third question:

3. Communication Between Plugins:

There seems to be two main mechanisms through which plugins
communicate: Either objects that implement shared interfaces are added
to the plugin manager object pool and picked up by downstream or
upstream plugins (in the top-down or bottom-up phase of plugin
initialization, respectively), or a singleton instance is acquired and
calls made on it.

Is the former approach used when dependants provide functionality to
their dependees (which are unknown), and the latter approach used when
dependees use their dependants (which are known)? Is that the deciding


> Many thanks in advance,
> Elvis

More information about the Qt-creator mailing list