miércoles, 28 de febrero de 2018

QgsMapLayerComboBox con filtros en QGIS 3

En el post anterior se consideró la inclusión de objetos Qt del tipo QFileDialog porque hasta ese momento había comprobado que era uno de los que tenía los mayores cambios para la migración a la nueva versión de QGIS 3. En el post actual voy a considerar las QgsMapLayerComboBox con filtros.

En la versión anterior de QGIS los filtros se tomaban de QgsMapLayerProxyModel; que pertenecía a qgis.gui. En la versión actual la clase ha sido mudada a qgis.core; algo que he podido verificar aquí.

En la imagen siguiente se puede observar la inclusión completa de todos los elementos Qt que tenía la versión original del plugin para producir rásters aleatorios en QGIS 2. Su aspecto y funcionalidad es similar a la de su predecesor. Sólo falta programar el algoritmo asociado al botón OK.


El código condensado para la visualización de la QgsMapLayerComboBox con filtro para las capas ráster (observe que en el menú de la Combo Box no se despliega la capa vectorial visible en la Map legend) en el plugin se encuentra a continuación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.
.
.
from qgis.core import QgsMapLayerProxyModel
from qgis.gui import QgsMapLayerComboBox
.
.
.
    def add_action(
        self,
        icon_path,
        text,
        callback,
        enabled_flag=True,
        add_to_menu=True,
        add_to_toolbar=True,
        status_tip=None,
        whats_this=None,
        parent=None):
.
.
.
        self.wcb = QgsMapLayerComboBox(self.dlg)
        self.wcb.setFixedWidth(211)
        self.wcb.move(130,17)
        self.wcb.setFilters( QgsMapLayerProxyModel.RasterLayer )
.
.
.



No hay comentarios: