There was once a time in QGIS where getting Open Street Map basemaps was tricky. ArcGIS long since solved this problems with ready-made basemaps available with a few clicks, but in QGIS there was the OpenLayers plugin, which was a rough go to use. In the first GIS short course I taught, this was the only option, so over Christmas break I decided to write something better. The result is QOSM, although since writing it I’ve discovered that the QuickMapServices plugin, while much less searchable, is much more effective. Still the person in charge of the QGIS plugin repository let in the plugin saying it would help inspire improvement.
Still, I think my plugin does a few things better than QMS, but QMS really does everything I’d ever wanted a basemap plugin to do. The main difference is the cacheing – QOSM is designed to store tiles indefinitely and store a lot of them (it even has an option to cache everything for a whole area), whereas QMS is designed to download tiles on the fly (although you can change the global cacheing expiry time in QGIS main preferences to get QMS to cache things for longer).
The main benefit of writing QOSM was to get some insight into the QGIS plugin structure, which is quite powerful, if poorly documented. Plugins are written in Python (2), and allow easy creating of user interfaces using PyQt bindings for the Qt framework. The Python Console plugin allows users to easily run scripts that reference the QGIS Python interface, but plugins allow users to take control of the canavas, projects, loading layers, and even calling processing functions within the main user interface, and are distributed by the QGIS plugin repository. A manual of QGIS Python functionality is available on the QGIS website, as well as the API reference (the API reference is for the C++ classes, but calling these in Python works exactly the same in most cases).
So there you have it, it’s a little anti-climatic, but if you need to load a hillshade layer or cache an entire province worth of tiles or aerial imagery, QOSM is what you’re looking for.