Tôi đã xây dựng một plugin để cung cấp cơ sở dữ liệu Spatialite với mặt nạ đầu vào. Có hai trường đại diện cho kích thước tối thiểu / tối đa của một đối tượng.
Trong khoảnh khắc tôi gọi Công cụ đo lường ( iface.actionMeasure().trigger()
) bằng hai "Nút đo", bấm vào thứ nguyên và nhập giá trị bằng bàn phím của tôi vào các trường (QLineEdit).
Có khả năng là sau khi tôi nhấp chuột phải (đo kết thúc) với Công cụ đo lường, giá trị sẽ được tự động cam kết với trường (tối thiểu hoặc tối đa, QLineEdit) không?
- Gọi công cụ đo lường (nó hoạt động)
- Nhấp chuột trái: bắt đầu đo
- và 4. cùng một lúc: Nhấp chuột phải và cam kết Tổng giá trị của Công cụ đo lường vào trường tối thiểu (QLineEdit).
CẬP NHẬT 1:
Một ngày sau khi hỏi câu hỏi này, tôi đã có ý tưởng để có một lớp linestring mà tôi có thể sử dụng làm công cụ đo lường (ST_Lpm (geom)). Ưu điểm là bạn có thể có toàn quyền kiểm soát thao tác và lấy dữ liệu từ nó. Một bất lợi là một lớp bổ sung trong dự án.
Một quy trình công việc có thể là:
nhấp vào biện pháp: chuyển đổi chỉnh sửa, kích hoạt "Thêm tính năng"
Tạo linestring đại diện cho kích thước tối thiểu của một đối tượng
Xác nhận thay đổi, tính toán độ dài của linestring (ST_Lpm (geom)), cam kết độ dài với QLineEdit
Đóng hộp thoại và xóa linestring (XÓA TỪ)
Nhưng câu hỏi thực tế của tôi vẫn còn. Có cách nào để lấy giá trị khoảng cách từ Công cụ đo trực tiếp không?
Cập nhật 2:
Với sự giúp đỡ nếu Jakob tôi có thể cập nhật QLineEdit của mình với Tổng giá trị của Công cụ đo cho đến khi tôi đóng Công cụ đo. Sau đó, giá trị được đặt thành '0,000 m'. Tôi đã giải quyết vấn đề này bằng cách sử dụng:
def text_changed(str_measure):
if str_measure == '0,000 m':
pass
else:
self.min.setText(str_measure)
Nó hoạt động, nhưng tôi không biết nếu đây là một giải pháp thích hợp.