I would like to be able to load/unload my plugins at any time. I think it's better that plugins keep track of their actions and remove menu entries when they are unloaded? Main app shouldn't do this.

I'm not sure but I think this can be only done using the first method (app exports interface for plugins). But I have no idea how to do this? Any help?

The other method is used in plugin example from docs. But I don't like it since plugin signals and slots are managed from main app. My app shouldn't have any knowledge of plugins.