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

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
Филиппов Владислав
Гуру
Сообщения: 1035
Зарегистрирован: 17 фев 2006, 06:28
Репутация: 144
Ваше звание: Геннадич
Откуда: Новосибирск
Контактная информация:

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

Сообщение Филиппов Владислав » 19 фев 2015, 14:29

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

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

def openProject():
    pass

def saveProject():
    pass

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

yellow-sky
Гуру
Сообщения: 588
Зарегистрирован: 30 мар 2009, 21:53
Репутация: 55
Откуда: Королев

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

Сообщение yellow-sky » 20 фев 2015, 10:41

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

Аватара пользователя
Филиппов Владислав
Гуру
Сообщения: 1035
Зарегистрирован: 17 фев 2006, 06:28
Репутация: 144
Ваше звание: Геннадич
Откуда: Новосибирск
Контактная информация:

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

Сообщение Филиппов Владислав » 20 фев 2015, 10:50

типа как тут - http://www.qgisworkshop.org/html/worksh ... ugins.html
там правда для старой версии

yellow-sky
Гуру
Сообщения: 588
Зарегистрирован: 30 мар 2009, 21:53
Репутация: 55
Откуда: Королев

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

Сообщение yellow-sky » 20 фев 2015, 11:05

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

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя