J'ai construit un plugin pour alimenter une base de données Spatialite avec un masque de saisie. Il y a deux champs qui représentent la dimension min / max d'un objet.
Au moment où j'appelle l'outil de mesure ( iface.actionMeasure().trigger()
) avec les deux boutons-poussoirs "mesure", cliquez sur la dimension et tapez la valeur avec mon clavier dans les champs (QLineEdit).
Existe-t-il la possibilité qu'après avoir fait le clic droit (terminer la mesure) avec l'outil Mesurer, la valeur sera automatiquement validée dans le champ (min ou max, QLineEdit)?
- Outil de mesure d'appel (cela fonctionne)
- Clic gauche: commencer à mesurer
- et 4. à la fois: clic droit et validation de la valeur totale de l'outil de mesure dans le champ min (QLineEdit).
MISE À JOUR 1:
Un jour après avoir posé cette question, j'ai eu l'idée d'avoir une couche de chaîne de lignes que je pourrais utiliser comme outil de mesure (ST_Length (geom)). L'avantage est que vous pouvez avoir le contrôle total de la manipulation et de l'obtention de données à partir de celui-ci. Un inconvénient est une couche supplémentaire dans le projet.
Un workflow pourrait être:
cliquez sur mesure: basculez l'édition, activez "Ajouter une fonction"
Créer une chaîne de lignes qui représente la dimension minimale d'un objet
Confirmer les modifications, calculer la longueur de la chaîne de lignes (ST_Length (geom)), valider la longueur dans QLineEdit
Fermer la boîte de dialogue et supprimer la chaîne de ligne (DELETE FROM)
Mais ma véritable question demeure. Existe-t-il un moyen d'obtenir directement la valeur de distance à partir de l'outil de mesure?
Mise à jour 2:
Avec l'aide de Jakob, je peux mettre à jour mon QLineEdit avec la valeur totale de l'outil de mesure jusqu'à ce que je ferme l'outil de mesure. Ensuite, la valeur est définie sur '0,000 m'. J'ai résolu ce problème en utilisant ceci:
def text_changed(str_measure):
if str_measure == '0,000 m':
pass
else:
self.min.setText(str_measure)
Cela fonctionne, mais je ne sais pas si c'est une bonne solution.
la source
widget_measure = [w for w in QApplication.instance().allWidgets() if w.objectName() == 'QgsMeasureBase'][0]
puisfor i in widget_measure.children(): print i.objectName()
, il y a le widget 'buttonBox', qui j'espère inclut le boutonQDialogButtonBox.Close
. Cela peut-il être utilisé pour dire "si vous cliquez sur Fermer, conservez la valeur editTotal ou ne faites rien"?