He creado un complemento para alimentar una base de datos Spatialite con una máscara de entrada. Hay dos campos que representan la dimensión mínima / máxima de un objeto.
En el momento en que llamo a la herramienta Medir ( iface.actionMeasure().trigger()
) con los dos botones "medir", haga clic en la dimensión y escriba el valor con mi teclado en los campos (QLineEdit).
¿Existe la posibilidad de que después de hacer clic con el botón derecho (terminar la medición) con la herramienta de medición, el valor se confirme automáticamente en el campo (mínimo o máximo, QLineEdit)?
- Herramienta de medida de llamada (funciona)
- Clic izquierdo: comenzar a medir
- y 4. a la vez: haga clic derecho y confirme el valor total de la herramienta de medición en el campo min (QLineEdit).
ACTUALIZACIÓN 1:
Un día después de hacer esta pregunta, tuve la idea de tener una capa de cadena lineal que podría usar como herramienta de medida (ST_Length (geom)). La ventaja es que podría tener el control total de manipular y obtener datos de él. Una desventaja es una capa adicional en el proyecto.
Un flujo de trabajo podría ser:
medida de clic: alternar la edición, activar "Agregar función"
Crear una cadena lineal que represente la dimensión mínima de un objeto
Confirme los cambios, calcule la longitud de la cadena lineal (ST_Length (geom)), confirme la longitud a QLineEdit
Cerrar el cuadro de diálogo y eliminar la cadena de línea (DELETE FROM)
Pero mi pregunta real sigue siendo. ¿Hay alguna manera de obtener el valor de distancia directamente desde la herramienta de medición?
Actualización 2:
Con la ayuda de Jakob, puedo actualizar mi QLineEdit con el valor total de la herramienta de medición hasta que cierre la herramienta de medición . Entonces el valor se establece en '0,000 m'. Resolví este problema usando esto:
def text_changed(str_measure):
if str_measure == '0,000 m':
pass
else:
self.min.setText(str_measure)
Funciona, pero no sé si esta es una solución adecuada.
fuente
widget_measure = [w for w in QApplication.instance().allWidgets() if w.objectName() == 'QgsMeasureBase'][0]
entoncesfor i in widget_measure.children(): print i.objectName()
, está el widget 'buttonBox', que espero incluya el botónQDialogButtonBox.Close
. ¿Se puede usar esto para decir "si se hace clic en cerrar, mantenga el valor de edición total o no haga nada"?