Zbudowałem wtyczkę do zasilania bazy danych Spatialite za pomocą maski wprowadzania. Istnieją dwa pola reprezentujące minimalny / maksymalny wymiar obiektu.
W momencie, gdy wywołuję narzędzie Measure ( iface.actionMeasure().trigger()
) za pomocą dwóch przycisków „miara”, kliknij wymiar i wpisz wartość za pomocą klawiatury w polach (QLineEdit).
Czy istnieje możliwość, że po wykonaniu kliknięcia prawym przyciskiem myszy (zakończenie pomiaru) za pomocą Narzędzia pomiarowego wartość zostanie automatycznie przypisana do pola (min. Lub maks., QLineEdit)?
- Narzędzie pomiaru połączeń (działa)
- Kliknij lewym przyciskiem: rozpocznij pomiar
- oraz 4. naraz: kliknij prawym przyciskiem myszy i zatwierdź całkowitą wartość narzędzia pomiarowego w polu min (QLineEdit).
AKTUALIZACJA 1:
Pewnego dnia po zadaniu tego pytania wpadłem na pomysł, aby mieć warstwę podkładu, której mógłbym użyć jako narzędzia do pomiaru (ST_Length (geom)). Zaletą jest to, że możesz mieć pełną kontrolę nad manipulowaniem i uzyskiwaniem z niego danych. Wadą jest dodatkowa warstwa w projekcie.
Przepływ pracy może być:
pomiar miary: przełącz edycję, aktywuj „Dodaj funkcję”
Utwórz znacznik linii reprezentujący minimalny wymiar obiektu
Potwierdź zmiany, obliczyć długość linii (ST_Length (geom)), zatwierdzić długość do QLineEdit
Zamknij okno dialogowe i usuń oznaczenie linii (USUŃ Z)
Ale moje aktualne pytanie pozostaje. Czy istnieje sposób na uzyskanie wartości odległości bezpośrednio z narzędzia pomiarowego?
Aktualizacja 2:
Z pomocą, jeśli Jakob, mogę zaktualizować mój QLineEdit o Łączną wartość narzędzia pomiarowego, dopóki nie zamknę narzędzia pomiarowego . Następnie wartość jest ustawiana na „0,000 m”. Rozwiązałem ten problem, używając tego:
def text_changed(str_measure):
if str_measure == '0,000 m':
pass
else:
self.min.setText(str_measure)
Działa, ale nie wiem, czy to właściwe rozwiązanie.
źródło
widget_measure = [w for w in QApplication.instance().allWidgets() if w.objectName() == 'QgsMeasureBase'][0]
wtedyfor i in widget_measure.children(): print i.objectName()
jest widżet „buttonBox”, który, mam nadzieję, obejmuje przyciskQDialogButtonBox.Close
. Czy można to powiedzieć „po kliknięciu przycisku Zamknij zachowaj wartość edytowalną lub nic nie rób”?