setupBindings is called for every QmlObject created and installs various bits on the QQmlEngine, such as a network access manager, a theme icon provider, etc. However, since we use a shared QQmlEngine in various places, most of this needs to be done only once.
This splits setupBindings into a setupContext method for setting up the localized context needed for every instance and a setupEngine static function that setups an engine. A fourth constructor is added that allows to influence the setup behavior. While at it, delegating constructors are used doing both to not change behavior.