피처 객체의 부모 레이어를 직접 찾거나 QgsFeature 클래스의 메서드에서 선택했는지 여부를 직접 확인할 수있는 방법이 없습니다.
에 대한 유사한 접근 방식 vlayer.selectedFeatures()
이에 있는지 테스트하는 feat.id()
것입니다 vlayer.selectedFeaturesIds()
. QgsFeatureId는 다른 벡터 레이어와 비교할 때 고유 한 값이 아니며 고유 한 레이어 내에서만 가능합니다.
또는 vlayer.selectedFeatures()
공급자의 모든 기능 대신 해당 기능으로 시작하여 해당 기능을 반복 할 수 있습니다.
또 다른 방법은 주어진 벡터 레이어에 대해 선택된 피처 ID와 선택되지 않은 피처 ID의 세트 (또는 목록)를 초기에 수집하는 것입니다.
# 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
벡터 레이어의 모든 기능 (또는 ID)에 대한 참조를 검색하는 단일 호출을 찾지 못하는 것 같습니다 (즉, 여전히 사용 QgsVectorLayer.select()
하고 반복해야 함 QgsVectorLayer.nextFeature()
).
편집 : QgsVectorLaer가 선택 호출을 처리 할 수 있도록 업데이트 된 코드 (제공자를 직접 가져올 필요가 없음) 및 setSelectedFeatures()
업데이트 해야하는 맵 캔버스에서 실제로 선택된 기능을 엉망으로 만들지 않습니다 .
편집 2 : 기능 ID 세트를 작성한 후 반복 QgsVectorLayer.featureAtId(featid)
하여 기능에 액세스하는 데 사용할 수 있습니다.