Dường như không có cách nào để tìm thấy trực tiếp lớp cha của đối tượng tính năng hoặc liệu nó có được chọn từ một phương thức trong lớp QssFeature hay không.
Một cách tiếp cận tương tự vlayer.selectedFeatures()
là để kiểm tra xem feat.id()
có trong không vlayer.selectedFeaturesIds()
. QssFeatureIds không phải là giá trị duy nhất so với các lớp vectơ khác, chỉ trong lớp riêng của chúng.
Ngoài ra, bạn có thể bắt đầu với vlayer.selectedFeatures()
và lặp lại các tính năng đó, thay vì tất cả các tính năng của nhà cung cấp.
Tuy nhiên, một cách tiếp cận khác là thu thập ban đầu các tập hợp (hoặc danh sách) các id tính năng được chọn và không được chọn cho một lớp vectơ đã cho:
# previous relevant code
set_selids = set(vlayer.selectedFeaturesIds())
feat = QgsFeature()
vlayer.select([], QgsRectangle(), False)
set_allids = set()
while vlayer.nextFeature(feat):
set_allids.add(feat.id())
set_notselids = set_allids - set_selids
print set_allids
print set_selids
print set_notselids
Tôi dường như không thể tìm thấy một cuộc gọi duy nhất để truy xuất một tham chiếu đến tất cả các tính năng (hoặc id) cho một lớp vectơ (tức là vẫn phải sử dụng QgsVectorLayer.select()
và lặp lại với QgsVectorLayer.nextFeature()
).
Chỉnh sửa : mã được cập nhật để phản ánh QssVectorLaer có thể xử lý cuộc gọi được chọn (không cần phải trực tiếp nhận nhà cung cấp) và không làm rối các tính năng được chọn thực tế trong khung vẽ bản đồ, cần setSelectedFeatures()
phải cập nhật.
Chỉnh sửa 2 : sau khi xây dựng bộ id tính năng, bạn có thể lặp lại chúng và sử dụng QgsVectorLayer.featureAtId(featid)
để truy cập tính năng.