Si vous placez les entrées de menu de votre extension dans un des nouveaux menus (Raster, Vecteur, Base de Donnée ou Internet), vous devez modifier le code des fonctions initGui() et unload(). Étant donné que ces nouveaux menus ne sont disponibles qu’à partir de QGIS 2.0, la première étape consiste à vérifier que la version installée de QGIS possède toutes les fonctions nécessaires. Si les nouveaux menus sont disponibles, nous allons placer notre extension sous ce menu, sinon nous allons utiliser l’ancien menu Extensions. Voici un exemple de menu Raster:
def initGui(self):
# create action that will start plugin configuration
self.action = QAction(QIcon(":/plugins/testplug/icon.png"), "Test plugin", \
self.iface.mainWindow())
self.action.setWhatsThis("Configuration for test plugin")
self.action.setStatusTip("This is status tip")
QObject.connect(self.action, SIGNAL("triggered()"), self.run)
# check if Raster menu available
if hasattr(self.iface, "addPluginToRasterMenu"):
# Raster menu and toolbar available
self.iface.addRasterToolBarIcon(self.action)
self.iface.addPluginToRasterMenu("&Test plugins", self.action)
else:
# there is no Raster menu, place plugin under Plugins menu as usual
self.iface.addToolBarIcon(self.action)
self.iface.addPluginToMenu("&Test plugins", self.action)
# connect to signal renderComplete which is emitted when canvas rendering is done
QObject.connect(self.iface.mapCanvas(), SIGNAL("renderComplete(QPainter *)"), \
self.renderTest)
def unload(self):
# check if Raster menu available and remove our buttons from appropriate
# menu and toolbar
if hasattr(self.iface, "addPluginToRasterMenu"):
self.iface.removePluginRasterMenu("&Test plugins",self.action)
self.iface.removeRasterToolBarIcon(self.action)
else:
self.iface.removePluginMenu("&Test plugins",self.action)
self.iface.removeToolBarIcon(self.action)
# disconnect from signal of the canvas
QObject.disconnect(self.iface.mapCanvas(), SIGNAL("renderComplete(QPainter *)"), \
self.renderTest)