Codesnippers

Dit gedeelte behandelt codesnippers om de ontwikkeling van plug-ins te faciliteren.

Hoe een methode aan te roepen met een sneltoets

Voeg in de plug-in de initGui() toe

self.keyAction = QAction("Test Plugin", self.iface.mainWindow())
self.iface.registerMainWindowAction(self.keyAction, "F7") # action1 triggered by F7 key
self.iface.addPluginToMenu("&Test plugins", self.keyAction)
QObject.connect(self.keyAction, SIGNAL("triggered()"),self.keyActionF7)

Aan unload() voeg toe

self.iface.unregisterMainWindowAction(self.keyAction)

De methode die wordt aangeroepen wanneer op F7 wordt gedrukt

def keyActionF7(self):
  QMessageBox.information(self.iface.mainWindow(),"Ok", "You pressed F7")

Hoe te schakelen tussen lagen

Vanaf QGIS 2.4 is er een nieuwe API voor de lagenboom die directe toegang tot de lagenboom in de legenda toestaat. Hier is een voorbeeld om te schakelen met de zichtbaarheid van de actieve laag

root = QgsProject.instance().layerTreeRoot()
node = root.findLayer(iface.activeLayer().id())
new_state = Qt.Checked if node.isVisible() == Qt.Unchecked else Qt.Unchecked
node.setVisible(new_state)

Hoe toegang te krijgen tot de attributentabel van geselecteerde objecten

def changeValue(self, value):
  layer = self.iface.activeLayer()
  if(layer):
    nF = layer.selectedFeatureCount()
    if (nF > 0):
      layer.startEditing()
      ob = layer.selectedFeaturesIds()
      b = QVariant(value)
      if (nF > 1):
        for i in ob:
        layer.changeAttributeValue(int(i), 1, b) # 1 being the second column
      else:
        layer.changeAttributeValue(int(ob[0]), 1, b) # 1 being the second column
      layer.commitChanges()
    else:
      QMessageBox.critical(self.iface.mainWindow(), "Error",
        "Please select at least one feature from current layer")
  else:
    QMessageBox.critical(self.iface.mainWindow(), "Error", "Please select a layer")

De methode vereist één parameter (de nieuwe waarde voor de attribuutveld van het geselecteerde object(en)) en kan worden aangeroepen met

self.changeValue(50)