Eu construí um plugin para alimentar um banco de dados Spatialite com uma máscara de entrada. Existem dois campos que representam a dimensão mínima / máxima de um objeto.
No momento em que chamo a ferramenta Measure ( iface.actionMeasure().trigger()
) com os dois botões de pressão "measure", clique na dimensão e digite o valor com o teclado nos campos (QLineEdit).
Existe a possibilidade de que, depois de clicar com o botão direito do mouse (concluir a medição) com a Ferramenta de Medição, o valor seja automaticamente confirmado no campo (mínimo ou máximo, QLineEdit)?
- Ferramenta Call Measure (funciona)
- Clique esquerdo: comece a medir
- e 4. de uma vez: Clique com o botão direito do mouse e confirme o valor total da ferramenta Measure no campo min (QLineEdit).
ATUALIZAÇÃO 1:
Um dia depois de fazer essa pergunta, tive a ideia de ter uma camada de cadeia de linhas que eu poderia usar como uma ferramenta de medida (ST_Length (geom)). A vantagem é que você pode ter o controle total da manipulação e obtenção de dados a partir dele. Uma desvantagem é uma camada adicional no projeto.
Um fluxo de trabalho pode ser:
clique em medir: alterne a edição, ative "Adicionar recurso"
Crie cadeia de linhas que represente a dimensão mínima de um objeto
Confirme as alterações, calcule o comprimento da cadeia de linhas (ST_Length (geom)), confirme o comprimento para QLineEdit
Feche a caixa de diálogo e remova a cadeia de linhas (DELETE FROM)
Mas minha pergunta real permanece. Existe uma maneira de obter o valor da distância diretamente da Ferramenta Medir?
Atualização 2:
Com a ajuda do Jakob, posso atualizar meu QLineEdit com o valor Total da ferramenta Measure até fechar a ferramenta Measure. Então o valor é definido como '0,000 m'. Resolvi esse problema usando o seguinte:
def text_changed(str_measure):
if str_measure == '0,000 m':
pass
else:
self.min.setText(str_measure)
Funciona, mas não sei se é uma solução adequada.
fonte
widget_measure = [w for w in QApplication.instance().allWidgets() if w.objectName() == 'QgsMeasureBase'][0]
thenfor i in widget_measure.children(): print i.objectName()
, existe o widget 'buttonBox', que espero inclua o botãoQDialogButtonBox.Close
. Isso pode ser usado para dizer "se clicar em fechar, mantenha o valor editTotal ou não faça nada"?