QStandardItemModel(1)

6071 단어
13.2.4  QStandardItemModel(1)
클래스 QabstractItemModel, QabstractListModel, QAbstractTableModel 은 데 이 터 를 저장 하지 않 습 니 다. 사용 자 는 이러한 클래스 에서 하위 클래스 를 파생 시 키 고 하위 클래스 에서 특정한 데이터 구 조 를 정의 하여 데 이 터 를 저장 해 야 합 니 다.이와 달리 클래스 QStandardItemModel 은 데이터 저장 을 담당 하 며, 각 데이터 항목 은 클래스 QStandardItem 의 대상 으로 표 시 됩 니 다.우 리 는 먼저 클래스 QStandardItem 을 사용 하여 데이터 항목 을 저장 하 는 방법 을 논술 한 다음 에 클래스 QStandardItem Model 을 사용 하여 이 데이터 항목 을 조직 하여 목록, 표 또는 트 리 를 만들어 다른 보기 류 에 표시 하 는 방법 을 논술 합 니 다.
앞에서 말 한 바 와 같이 하나의 데이터 항목 은 몇 개의 '역할, 데이터 서브 항목' 으로 구성 된다.클래스 QStandardItem 은 이 데 이 터 를 저장 하고 방문 합 니 다.이러한 종류의 내 부 는 QVector 라 는 용 기 를 정의 합 니 다. 모든 용기 요 소 는 본질 적 으로 '역할, 데이터 하위 항목' 을 저장 합 니 다.
각 캐릭터 에 대응 하 는 데이터 하위 항목 이 서로 다른 유형 을 가 질 수 있 기 때문에 Qt 는 QVariant 를 사용 하여 각 데이터 하위 항목 을 저장 합 니 다.사용자 가 일부 데 이 터 를 QStandard Item 대상 에 저장 하려 고 할 때 구성원 함 수 를 호출 할 수 있 습 니 다.

  
  
  
  
  1. void setData ( const QVariant & value, int role) 

 
"role, value" 를 대 입 합 니 다.사용자 가 이 대상 의 데 이 터 를 읽 으 려 고 할 때 다른 구성원 함 수 를 호출 할 수 있 습 니 다.

  
  
  
  
  1. QVariant data ( int role = ) const 

역할 역할 에 대응 하 는 데이터 하위 항목 을 읽 습 니 다.
상기 두 함 수 는 QStandardItem 의 핵심 입 니 다.이 두 함수 가 있 으 면 우 리 는 이 클래스 가 표시 하 는 데이터 항목 의 모든 '역할, 데이터 하위 항목' 을 방문 할 수 있 습 니 다.그러나 일부 상용 캐릭터 에 대해 이 종 류 는 더욱 간결 하고 기억 하기 쉬 운 구성원 함 수 를 제공 했다.예 를 들 어 하나의 데이터 항목 이 보기 에 표 시 될 때 텍스트, 아이콘 을 포함 하고 체크 상 자 를 포함 할 수 있 습 니 다.캐릭터 Qt: BackgroundRole 은 디 스 플레이 배경 을 제어 합 니 다. Qt: FontRole 은 텍스트 글꼴 을 제어 합 니 다. Qt: ForegroundRole 은 텍스트 색상 을 제어 합 니 다. Qt: CheckStateRole 은 체크 상자 의 상 태 를 제어 합 니 다.이 클래스 에서 제공 하 는 구성원 함 수 는 자주 사용 하 는 캐릭터 에 대응 하 는 데이터 하위 항목 에 편리 하 게 접근 할 수 있 습 니 다.구성원 함수 setBackground (), background () 는 각각 배경 브러시 를 설정 / 되 돌려 줍 니 다.함수 setFont (), font () 는 각각 텍스트 글꼴 을 설정 / 되 돌려 줍 니 다.함수 setForeground (), foreground () 는 각각 글꼴 색상 을 설정 / 되 돌려 줍 니 다.함수 setCheckState (), checkState () 는 각각 체크 상자 상 태 를 설정 / 되 돌려 줍 니 다.
클래스 QStandardItemModel 은 클래스 QStandardItem 이 표시 하 는 데이터 항목 을 조직 하여 목록, 표, 트 리, 심지어 더 복잡 한 데이터 구 조 를 형성한다.이 클래스 는 구성원 함 수 를 제공 합 니 다. 이 데이터 구조 에 새로운 데이터 항목 을 추가 하고 존재 하 는 데이터 항목 을 변경 하거나 기 존 데이터 항목 을 삭제 합 니 다.다른 한편, 하나의 모델 클래스 로 서 QAbstractItemModel 이 정의 하 는 인터페이스 함 수 를 실현 하여 다른 보기 류 가 모델 의 데이터 항목 에 접근 할 수 있 도록 합 니 다.
데이터 세트 가 목록 으로 표시 되면 QStandardItemModel 의 구성원 함수 appendRow () 를 호출 하여 목록 에 데이터 항목 을 추가 하고 item () 을 사용 하여 코드 세그먼트 1310 과 같은 데이터 항목 을 읽 을 수 있 습 니 다.행 ① 모델 의 맨 위 에 있 는 루트 노드 를 가 져 옵 니 다. 행 ② QStandardItem 대상 을 만 들 고 데이터 항목 을 표시 합 니 다. 행 ③ 이 데이터 항목 을 루트 노드 의 하위 노드 로 목록 에 추가 합 니 다.행 ② 의 구조 함 수 는 내부 에서 이러한 setData () 함 수 를 호출 하여 행 ② 의 QString 대상 을 Qt: DisplayRole 에 대응 하 는 데이터 하위 항목 으로 새 구조의 대상 에 저장 합 니 다.데이터 세트 자체 가 목록 이기 때문에 저 희 는 QListView 를 사용 하여 이 데이터 세트 를 표시 합 니 다. 독 자 는 이 예 를 실행 하여 디 스 플레이 결 과 를 볼 수 있 습 니 다.
코드 세그먼트 13 10, QStandardItemModel 처리 목록 을 사용 하여 z: \ examples \ \ mvc \ \ QStandardItemModeldemo\main.cpp

  
  
  
  
  1. QStandardItemModel listModel;  
  2. QStandardItem *rootItem = listModel.invisibleRootItem();                ①  
  3. for (int row = 0; row < 4; ++row) {  
  4.     QStandardItem *item = new QStandardItem(QString("%0").arg(row) );②  
  5.     rootItem->appendRow( item );        ③  
  6. }     
  7. QListView listView;  
  8. listView.setModel ( & listModel );  

데이터 세트 가 표 로 표시 되면 클래스 QStandardItemModel 의 구성원 함수 setItem () 을 호출 하여 표 의 데이터 항목 을 설정 할 수 있 습 니 다. 예 를 들 어 코드 세그먼트 1311 참조.이 코드 세그먼트 의 데이터 세트 는 표 이기 때문에 이 데이터 세트 를 QTableView 로 표시 합 니 다.
코드 세그먼트 13 11, QStandardItemModel 처리 표를 사용 하여 z: \ examples \ \ mvc \ \ QStandardItemModeldemo\main.cpp
 

  
  
  
  
  1. QStandardItemModel tableModel(4, 4);  
  2.     for (int row = 0; row < 4; ++row) {  
  3.          for (int column = 0; column < 4; ++column) {  
  4.              QStandardItem *item = new QStandardItem(  
  5.                  QString("%0,%1").arg(row).arg(column));  
  6.              tableModel.setItem(row, column, item);  
  7.          }  
  8.     }     
  9.     QTableView tableView;  
  10.     tableView.setModel( & tableModel );  

데이터 세트 가 하나의 트 리 로 표시 되면 클래스 QStandardItemModel 의 구성원 함수 appendRow () 를 호출 하여 특정한 트 리 노드 에 하위 노드 를 추가 할 수 있 습 니 다.이 함 수 를 여러 번 호출 하면 복잡 한 나 무 를 만 들 수 있 습 니 다.코드 세그먼트 13 12 는 간단 한 나 무 를 구축 합 니 다. 맨 위 에 있 는 뿌리 노드 는 '0' 의 하위 노드 가 있 고 이 하위 노드 는 '1' 의 하위 노드 가 있 습 니 다.이에 따라 '1' 자 노드 는 '2' 자 노드 가 있 고 '2' 자 노드 는 '3' 자 노드 가 있어 깊이 가 4 인 나 무 를 형성한다.이 나무의 모든 노드 는 형제 노드 가 없다 (같은 부모 노드 를 가 진 여러 노드 는 서로 형제 노드 라 고 부른다). 관심 이 있 는 독 자 는 이 코드 를 수정 하여 그 중의 일부 노드 가 형제 노드 를 가지 도록 할 수 있다.데이터 세트 가 나무 이기 때문에, 우 리 는 QTreeView 를 사용 하여 그것 을 표시 합 니 다.
 
본문 출처:http://book.51cto.com/art/201207/347880.htm

좋은 웹페이지 즐겨찾기