Ich habe ein Plugin zum Füttern einer Spatialite-Datenbank mit einer Eingabemaske erstellt. Es gibt zwei Felder, die die Min / Max-Dimension eines Objekts darstellen.
In dem Moment, in dem ich das Measure Tool ( iface.actionMeasure().trigger()
) mit den beiden Push Buttons "measure" aufrufe, klicke ich auf die Bemaßung und tippe den Wert mit meiner Tastatur in die Felder (QLineEdit).
Gibt es die Möglichkeit, dass nach dem Klicken mit der rechten Maustaste (Messung beenden) mit dem Measure Tool der Wert automatisch in das Feld übernommen wird (min oder max, QLineEdit)?
- Call Measure Tool (es funktioniert)
- Linksklick: Messung starten
- und 4. sofort: Klicken Sie mit der rechten Maustaste und übertragen Sie den Gesamtwert des Measure Tools in das Feld min (QLineEdit).
UPDATE 1:
Eines Tages, nachdem ich diese Frage gestellt hatte, kam mir die Idee, eine Linienfolge-Ebene zu erstellen, die ich als Messwerkzeug verwenden könnte (ST_Length (geom)). Der Vorteil ist, dass Sie die volle Kontrolle über die Manipulation und das Abrufen von Daten haben können. Ein Nachteil ist eine zusätzliche Ebene im Projekt.
Ein Workflow könnte sein:
Klickmaß: Bearbeitung umschalten, "Feature hinzufügen" aktivieren
Erstellen Sie eine Linienfolge, die die minimale Dimension eines Objekts darstellt
Bestätigen Sie die Änderungen, berechnen Sie die Länge der Linienfolge (ST_Length (geom)) und übergeben Sie die Länge an QLineEdit
Schließen Sie den Dialog und entfernen Sie die Linienfolge (ENTFERNEN VON)
Aber meine eigentliche Frage bleibt. Gibt es eine Möglichkeit, den Entfernungswert direkt aus dem Messwerkzeug zu ermitteln?
Update 2:
Mit der Hilfe von Jakob kann ich mein QLineEdit mit dem Gesamtwert des Measure Tools aktualisieren, bis ich das Measure Tool schließe. Dann wird der Wert auf '0,000 m' gesetzt. Ich habe dieses Problem folgendermaßen gelöst:
def text_changed(str_measure):
if str_measure == '0,000 m':
pass
else:
self.min.setText(str_measure)
Es funktioniert, aber ich weiß nicht, ob dies eine richtige Lösung ist.
quelle
widget_measure = [w for w in QApplication.instance().allWidgets() if w.objectName() == 'QgsMeasureBase'][0]
dannfor i in widget_measure.children(): print i.objectName()
gibt es das Widget ‚buttonBox‘, die ich encludes die Taste hoffenQDialogButtonBox.Close
. Kann dies verwendet werden, um zu sagen, dass "wenn auf Schließen geklickt wird, editTotal-Wert beibehalten oder nichts unternommen wird"?