플러그인 메뉴 항목을 새 메뉴(Raster, Vector, Database 또는 Web)에 추가하는 경우, initGui() 및 unload() 함수의 코드를 수정해야 합니다. QGIS 2.0 이후의 버전에서만 이 새 메뉴들을 사용할 수 있기 때문에, 가장 먼저 실행중인 QGIS 버전이 필요한 모든 기능들을 갖추고 있는지 확인해야 합니다.새 메뉴들을 사용할 수 있다면 플러그인을 이 메뉴 아래에 추가할 것이고, 그렇지 않을 경우 이전의 Plugins 메뉴에 추가할 것입니다. 다음은 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)