Important
La traduction est le fruit d’un effort communautaire auquel vous pouvez vous joindre. Cette page est actuellement traduite à 100.00%.
18. Utilisation de la classe QgsPluginLayer
Indication
Les extraits de code sur cette page nécessitent les importations suivantes si vous êtes en dehors de la console pyqgis :
1from qgis.core import (
2 QgsPluginLayer,
3 QgsPluginLayerType,
4 QgsMapLayerRenderer,
5 QgsApplication,
6 QgsProject,
7)
8
9from qgis.PyQt.QtGui import QImage
Si votre plugin utilise ses propres méthodes pour le rendu des couches, la meilleure façon de l’implémenter passe par l’écriture de vos propres types en vous basant sur la classe QgsPluginLayer
18.1. Héritage de la classe QgsPluginLayer
Vous trouverez ci dessous un exemple simple d’implémentation de la classe QgsPluginLayer, basé sur le code de l’extension Watermark
Le moteur de rendu personnalisé est la partie de l’implémentation qui définit le redu réel dans le canevas de carte.
1class WatermarkLayerRenderer(QgsMapLayerRenderer):
2
3 def __init__(self, layerId, rendererContext):
4 super().__init__(layerId, rendererContext)
5
6 def render(self):
7 image = QImage("/usr/share/icons/hicolor/128x128/apps/qgis.png")
8 painter = self.renderContext().painter()
9 painter.save()
10 painter.drawImage(10, 10, image)
11 painter.restore()
12 return True
13
14class WatermarkPluginLayer(QgsPluginLayer):
15
16 LAYER_TYPE="watermark"
17
18 def __init__(self):
19 super().__init__(WatermarkPluginLayer.LAYER_TYPE, "Watermark plugin layer")
20 self.setValid(True)
21
22 def createMapRenderer(self, rendererContext):
23 return WatermarkLayerRenderer(self.id(), rendererContext)
24
25 def setTransformContext(self, ct):
26 pass
27
28 # Methods for reading and writing specific information to the project file can
29 # also be added:
30
31 def readXml(self, node, context):
32 pass
33
34 def writeXml(self, node, doc, context):
35 pass
Le plugin layer peux être ajouté a un projet et à la carte comme n’importe quelle autre couche :
plugin_layer = WatermarkPluginLayer()
QgsProject.instance().addMapLayer(plugin_layer)
Quand vous chargez un projet contenant ce type de couches, une classe constructeur est necessaire
1class WatermarkPluginLayerType(QgsPluginLayerType):
2
3 def __init__(self):
4 super().__init__(WatermarkPluginLayer.LAYER_TYPE)
5
6 def createLayer(self):
7 return WatermarkPluginLayer()
8
9 # You can also add GUI code for displaying custom information
10 # in the layer properties
11 def showLayerProperties(self, layer):
12 pass
13
14
15# Keep a reference to the instance in Python so it won't
16# be garbage collected
17plt = WatermarkPluginLayerType()
18
19assert QgsApplication.pluginLayerRegistry().addPluginLayerType(plt)