根据 QGIS 中加载的图层在列表视图中动态创建复选框

Creating check boxes dynamically inside the listview based on the layers loaded in QGIS

我的 gui 中有两个名为 "Datacheckerlistview1" 和 "Datacheckerlistview2" 的列表视图。现在我已经在 QGIS 中加载了图层。根据加载的层数,我希望使用 "Datacheckerlistview1".. 内的层名称动态创建复选框(例如:如果加载了 4 层,我希望在内部动态创建 4 个复选框Datacheckerlistview1).我还在下面附上了我的代码,我没有在列表视图中找到任何带有下面代码的复选框。我是 Python 和 QGIS 的新手。帮助将不胜感激。

import os

from PyQt4 import QtGui, uic

FORM_CLASS, _ = uic.loadUiType(os.path.join(
os.path.dirname(__file__), 'DataCheckerModule_dialog_base.ui'))


class DataCheckerClassDialog(QtGui.QDialog, FORM_CLASS):
 def __init__(self, parent=None):
    """Constructor."""
    super(DataCheckerClassDialog, self).__init__(parent)
    # Set up the user interface from Designer.
    # After setupUI you can access any designer object by doing
    # self.<objectname>, and you can use autoconnect slots - see
    # http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html
    # #widgets-and-dialogs-with-auto-connect
    self.setupUi(self)

def dynamicCheckBoxes(self):
    """ Adds Checkboxes inside the listview dynamically based on the number of layers loaded in QGIS. """

    canvas = qgis.utils.iface.mapCanvas()
    allLayers = canvas.layers()
    model = QStandardItemModel()
    for i in allLayers:
        item = QStandardItem('Item %s' % allLayers.name())
        check = Qt.checked if randint(0,1) == 1 else Qt.Unchecked
        item.setCheckState(check)
        item.setCheckable(True)
        model.appendRow(item)
        return model


    DatacheckerlistView1.setModel(model)
    DatacheckerlistView1.show()

并且在 Python 主文件中,

class DataCheckerClass:
  QObject.connect(self.dlg.DatacheckerlistView1, SIGNAL("clicked()"), self.addLayers)

 def addLayers(self):
  super(DataCheckerClassDialog, self).dynamicCheckBoxes(self)

我在 python 主文件中进行了以下更改并且有效。感谢您的努力。

def addLayers(self):
    """ Adds Checkboxes inside the listview dynamically based on the number of layers loaded in QGIS. """

    canvas = qgis.utils.iface.mapCanvas()
    allLayers = canvas.layers()
    if canvas.layerCount > 0:
        model = QStandardItemModel()
        for i in allLayers:
            item = QStandardItem('%s' % i.name())
            item.setCheckable(True)
            model.appendRow(item)



        self.dlg.DatacheckerlistView1.setModel(model)
        self.dlg.DatacheckerlistView1.show()