2013-01-02 2 views
0

추가, 이름 바꾸기 및 다른 작업을 수행 할 때 항상 트리 노드 아래에 항상 자동으로 정렬되는 항목이 포함 된 트리를 만들고 싶습니다. std :: set 내 데이터 컨테이너에 대한 좋은 후보 것 같습니다. 그러나 Qt 트리는 인덱스 또는 행 번호를 통해 트리 항목에 액세스, 삽입 또는 제거되므로 벡터 또는 QList (포인터 벡터)를 선호합니다. std :: distance 같은 함수를 사용하여 집합의 항목에 대한 인덱스를 계산합니다. 그러나 나는 그것이 매우 천천히 (테스트되지 않음)라고 생각합니다. Qt 트리 모델을 std :: set와 함께 사용하게하는 좋은 방법이나 내 데이터에 벡터를 사용해야하거나 새 컨테이너를 개발해야할까요? 고마워요!Qt Tree 모델이 QSet에서 작동하도록하려면 어떻게해야합니까?

답변 찾기 : use boost::container::flat_set. 감사.

답변

2

QSet이 목적을 위해 좋은 생각이 아니다 있습니다. 인덱스 기반 액세스를 제공하지 않을뿐만 아니라 완전히 순서가 없습니다. 즉, 순회 순서가 절대적으로 보장됩니다. Qt 아이템 모델로 작업 할 수있는 합리적인 방법은 없습니다. 당신은 QList를 사용하고 그 값이 당신 자신 만의 것이라는 것을 확실하게하는 것이 훨씬 낫습니다.

+0

QSet이 std :: set과 같다고 생각했습니다. 그러나 그렇지 않습니다. 메모 해줘서 고마워. – user1899020

+0

@ user1899020 :하지만'std :: set'도 인덱스를 지원하지 않습니다. "약한"분류를 제공하는 것 이외의 상황과 많이 다른 것 같지 않습니다. – jdi

0

당신은 아마 QTreeView를 사용해야하고, 서브 클래스 QAbstractItemModel는 모든 데이터 소스를 사용할 수있는이 방법은 당신이

이 질문보고 싶어 : Creating Qt models for tree views