Saya telah membangun sebuah plugin untuk memberi makan basis data Spatialite dengan masker input. Ada dua bidang yang mewakili dimensi min / maks suatu objek.
Pada saat saya memanggil Measure Tool ( iface.actionMeasure().trigger()
) dengan dua Push Buttons "ukur", klik dimensi dan ketik nilainya dengan keyboard saya ke dalam bidang (QLineEdit).
Apakah ada kemungkinan bahwa setelah saya melakukan klik kanan (selesai mengukur) dengan Alat Ukur nilai akan secara otomatis berkomitmen ke bidang (min atau maks, QLineEdit)?
- Alat Ukur Panggilan (berfungsi)
- Klik Kiri: mulai mengukur
- dan 4. sekaligus: Klik kanan dan komit Nilai total Alat Ukur ke bidang min (QLineEdit).
PEMBARUAN 1:
Suatu hari setelah mengajukan pertanyaan ini saya mendapat ide untuk memiliki lapisan linestring yang dapat saya gunakan sebagai alat ukur (ST_Length (geom)). Keuntungannya adalah Anda bisa memiliki kontrol penuh untuk memanipulasi dan mendapatkan data darinya. Kerugiannya adalah lapisan tambahan dalam proyek.
Alur kerja dapat:
klik ukur: beralih pengeditan, aktifkan "Tambahkan Fitur"
Buat linestring yang mewakili dimensi min dari suatu objek
Konfirmasikan perubahan, hitung panjang linestring (ST_Length (geom)), komit panjang ke QLineEdit
Tutup Dialog dan hapus linestring (DELETE FROM)
Tapi pertanyaan saya yang sebenarnya tetap ada. Apakah ada cara untuk mendapatkan nilai jarak dari Alat Ukur secara langsung?
Pembaruan 2:
Dengan bantuan jika Jakob saya dapat memperbarui QLineEdit saya dengan nilai Total Alat Ukur sampai saya menutup Alat Ukur. Kemudian nilainya diatur ke '0,000 m'. Saya memecahkan masalah ini dengan menggunakan ini:
def text_changed(str_measure):
if str_measure == '0,000 m':
pass
else:
self.min.setText(str_measure)
Ini bekerja, tetapi saya tidak tahu apakah ini solusi yang tepat.
sumber
widget_measure = [w for w in QApplication.instance().allWidgets() if w.objectName() == 'QgsMeasureBase'][0]
lalufor i in widget_measure.children(): print i.objectName()
, ada widget 'buttonBox', yang saya harap menyertakan tombolQDialogButtonBox.Close
. Apakah ini dapat digunakan untuk mengatakan "jika tutup diklik menjaga nilai editTotal atau tidak melakukan apa-apa"?