Я создал плагин для подачи базы данных Spatialite с маской ввода. Есть два поля, которые представляют минимальное / максимальное измерение объекта.
В тот момент, когда я вызываю Measure Tool ( iface.actionMeasure().trigger()
) с двумя кнопками «measure», щелкните по измерению и введите значение с помощью клавиатуры в поля (QLineEdit).
Существует ли вероятность того, что после того, как я сделаю правый щелчок (закончить измерение) с помощью инструмента измерения, значение будет автоматически зафиксировано в поле (min или max, QLineEdit)?
- Call Measure Tool (работает)
- Левый щелчок: начать измерение
- и 4. сразу: щелкните правой кнопкой мыши и передайте Общее значение Measure Tool в поле min (QLineEdit).
ОБНОВЛЕНИЕ 1:
Однажды после того, как я задал этот вопрос, у меня появилась идея создать слой линейных линий, который я мог бы использовать в качестве инструмента измерения (ST_Length (geom)). Преимущество в том, что вы можете иметь полный контроль над манипулированием и получением данных из него. Недостатком является дополнительный слой в проекте.
Рабочий процесс может быть:
нажмите меру: переключить редактирование, активировать «Добавить функцию»
Создайте линейную строку, которая представляет минимальное измерение объекта
Подтвердите изменения, вычислите длину строки (ST_Length (geom)), передайте длину в QLineEdit
Закройте диалог и удалите строку строки (УДАЛИТЬ ИЗ)
Но мой актуальный вопрос остается. Есть ли способ получить значение расстояния непосредственно из инструмента измерения?
Обновление 2:
С помощью Jakob я могу обновить свой QLineEdit с помощью Total Value инструмента Measure, пока я не закрою инструмент Measure. Затем значение устанавливается на «0,000 м». Я решил эту проблему с помощью этого:
def text_changed(str_measure):
if str_measure == '0,000 m':
pass
else:
self.min.setText(str_measure)
Это работает, но я не знаю, является ли это правильным решением.
источник
widget_measure = [w for w in QApplication.instance().allWidgets() if w.objectName() == 'QgsMeasureBase'][0]
затемfor i in widget_measure.children(): print i.objectName()
, появляется виджет 'buttonBox', который, я надеюсь, включает кнопкуQDialogButtonBox.Close
. Можно ли это использовать, чтобы сказать «если щелкнуть по кнопке close, сохранить значение editTotal или ничего не делать»?