2009-08-30 3 views
3

제품 개체 목록 (행)이 있으며 각 개체에는 제품 ID, 제품군 등의 여러 데이터 필드가 있습니다. QAbstractTableModel을 서브 클래 싱하는 테이블 모델을 생성하고 QTableView에 데이터를 표시했습니다.Qt 모델의 트리보기 및 테이블보기

내가 원하는 것은 나무와 같은 구조로 모델의 "그룹화 된"보기를 제공하는 것입니다. 예를 들어 제품을 가족 ID로 그룹화하려면 트리에서 그룹 (가족 ID)의 첫 번째 단계에 제품 ID가 해당 가족 ID를 포함해야합니다.

아이디어가 있으십니까?

추 신 : 여러 그룹화 (패밀리 ID로 그룹화하고 다른 열로 그룹화) 등을 통해 모델이 트리가되어야 함을 알 수 있습니다. 루트 노드는 그룹을 나타내며 하위 노드는 그룹 구성원입니다. 다중 그룹화는 다중 레벨 트리에 의해 달성 될 수 있습니다.

내 변환 된 질문은 다음과 같습니다. 어떻게 트리의 리프 (지정된 수준에서) 만 표시하는 특수 QTableView 클래스를 구현할 수 있습니까? (사실 leafs는 우리가 그리드에서보고자하는 실제 객체이므로)

tableview에서 setRootIndex를 사용할 수 있지만 아무 것도 해결하지 못하고 다른 리프가 표시되지 않습니다.

I 조금 파고, 각 행과 열을 표시 할 때 QTableView :: paintEvent에서, 실제 상품 추천 페치 것을 발견 하였다

CONST QModelIndex 인덱스 = D-> 모델 -> 지수 (행, 열, d-> 루트);

여기서 d-> root()는 setRootIndex()에 의해 주어진 루트 노드입니다. 이것은 트리 트래버 설 코드에 내장되어야하며 모든 것이 잘 될 것입니다. 그러나 어떻게하면 paintEvent 메서드 전체를 다시 구현하지 않아도됩니까?

+0

동일한 방법으로 (예 : 가족 ID로) 그룹화 하시겠습니까? 아니면 정렬 순서가 변경 될 때 그룹을 변경 하시겠습니까? 첫 번째 문장은 꽤 간단하고 두 번째 문장은 그렇지 않은 문장이어야합니다. –

+0

나는 단순한 트리 모델을 만들고 다른 뷰를 위해 설정했다. 아래 예제는 트리 뷰를보고 싶지만 테이블 뷰에서는 familys가 아닌 제품을 보게됩니다. 테이블보기가 모델의 두 번째 레벨 노드를 보는 것을 어떻게 설정할 수 있습니까? 코드는 여기에서 찾을 수 있습니다. http://www.stud.u-szeged.hu/Veress.Krisztian/main.cpp –

+1

여기에 코드를 게시하면 검색 가능하고 모든 사람이 볼 수있게됩니다. –

답변

1

QTreeWidget이 원하는 사용자 지정에 따라 가장 쉬운 경로가 될 수 있지만 이미 모델이있는 경우 파생 된 경로에 따라 다릅니다. 이미 구축 한 행에 하위 구조를 추가해야하는 기능을 얻으려면 다음을 수행하십시오. 당신은 그것을 놓쳤을 지 모르지만 'QModelIndex'클래스는 '부모'필드를 가지고 있습니다. 이것은 계층 적 구조를 구축하는 데 도움이됩니다.

QStandardItemQStandardItemModel 클래스를 사용하면 도움이됩니다. 이것들은 계층 구조의 각 레벨을 표시하는 데 필요한 데이터가 다른 수의 열을 가질 수 있고 깊이에 제한이 없기 때문에 트리 구조를 구축하기에 알맞은 인터페이스를 가지고 있습니다.

모험심을 느낀다면 상단에서 받아 들여 QAbstractItemModel 인터페이스를 구현할 수 있지만 때로는 제대로 적용하기 어려울 수 있습니다.

은 전반적으로 나는이 때문에

for (int i = 0; i < 3; ++i) { 
    QStandardItem *parent= new QStandardItem("Family " + QString::number(i),this); 
    item->setRowCount(3); 
    for (int j = 0; j < 3; ++j) { 
     QStandardItem *child = new QStandardItem("Child " + QString::number(i*3+j), this); 
     parent->setChild(j,child); 
    } 
    model->appendRow(parent); 
} 

들어 QAbstractItemModel에 dimenionalities의 양 (행, 열, 상위/하위 및 역할)

에 QT에서 이상한 개념 중 하나라고 생각합니다

면책 조항 : 이것은 컴파일되지 않았습니다 ...

그러나 모델이 아니라 항목에 하위 항목을 추가해야하는 것을 알 수 있듯이 각 항목에는 항목 계층 구조가 포함될 수 있습니다.