Страница 1 из 1

Как перехватить событие создания нового объекта&

Добавлено: 19 фев 2015, 14:29
Филиппов Владислав
Как перехватить событие создания нового объекта, при вставки геометрии на слой из буфера обмена?
Нужно показать при этом форму ввода атрибутов пользователю.
Смотрел в QGIS 2.6 в свойствах слоя раздел "Действия", пока решения не нашёл.
В свойствах проекта есть раздел "макросы" с такими заглушками:

Код: Выделить всё

def openProject():
    pass

def saveProject():
    pass

def closeProject():
    pass
вот было бы что-то типа onCreateFeature

Re: Как перехватить событие создания нового объекта&

Добавлено: 20 фев 2015, 10:41
yellow-sky
Из буфера в слой можно вставить очень много записей (именно записей, геометрии в чистом виде в QGIS не копируются, вроде как). Поэтому, боюсь что тут только программно.
Если программно подходит, то можно посмотреть в сторону подписывания на события активного слоя:
featureAdded
В параметрах передается fid добавленной записи.
После можно добавить вызов(ы) открытия окна редактирования: iface.openFeatureForm с передачей векторного слоя и fid записи.

Re: Как перехватить событие создания нового объекта&

Добавлено: 20 фев 2015, 10:50
Филиппов Владислав
типа как тут - http://www.qgisworkshop.org/html/worksh ... ugins.html
там правда для старой версии

Re: Как перехватить событие создания нового объекта&

Добавлено: 20 фев 2015, 11:05
yellow-sky
Что-то типа того.
Если нужно, чтобы это работало постоянно, то тут будет трех этапная обработка:
1) Подписаться на событие смены активного слоя: iface.currentLayerChanged.
2) В обработчике события currentLayerChanged подписываться\отписываться на событие QgsVectorLayer.featureAdded
3) В обработчике featureAdded ловить fid вставленных записей, и (исходя из какой-то логики) запускать iface.openFeatureForm.