Я пытаюсь обновить таблицу, когда объект добавляется в мой слой, я пытаюсь использовать сигнал dataChanged от dataProvider этого слоя.Я могу обновить таблицу один раз, однако после этого сигнал не срабатывает.Я создал простой пример кода Python для проверки проблемы:
qgis_ltr_dir = "C:/Program Files/QGIS 2.18/apps/qgis-ltr"
import sys
from qgis.gui import *
from qgis.core import *
from PyQt4.QtGui import *
from PyQt4.QtCore import *
def func():
print 'Print'
app = QApplication(sys.argv)
QgsApplication.setPrefixPath(qgis_ltr_dir, True)
QgsApplication.initQgis()
vector_layer = QgsVectorLayer("/shapefiles/my_shapes.shp", "vector_layer", "ogr")
print vector_layer.isValid()
QgsMapLayerRegistry.instance().addMapLayer(vector_layer)
#vector_layer.featureAdded.connect(func)
vector_layer.dataProvider().dataChanged.connect(func)
print 'Before First Add'
new_feat = QgsFeature(vector_layer.fields())
vector_layer.dataProvider().addFeatures([new_feat])
print 'Before Second Add'
new_feat2 = QgsFeature(vector_layer.fields())
vector_layer.dataProvider().addFeatures([new_feat2])
Вывод кода:
True
Before First Add
Print
Before Second Add
«True» означает, что слой был загружен правильно, «Print 'должен быть напечатан дважды, но в этом случае был напечатан один раз.
Я уже попробовал функцию, добавленную из QgsVectorLayer, но сигнал вообще не излучается.
Ссылка на документацию по сигналу: https://qgis.org/pyqgis/master/core/QgsDataProvider.html#qgis.core.QgsDataProvider.dataChanged