QStandardItemModel(1)
클래스 QabstractItemModel, QabstractListModel, QAbstractTableModel 은 데 이 터 를 저장 하지 않 습 니 다. 사용 자 는 이러한 클래스 에서 하위 클래스 를 파생 시 키 고 하위 클래스 에서 특정한 데이터 구 조 를 정의 하여 데 이 터 를 저장 해 야 합 니 다.이와 달리 클래스 QStandardItemModel 은 데이터 저장 을 담당 하 며, 각 데이터 항목 은 클래스 QStandardItem 의 대상 으로 표 시 됩 니 다.우 리 는 먼저 클래스 QStandardItem 을 사용 하여 데이터 항목 을 저장 하 는 방법 을 논술 한 다음 에 클래스 QStandardItem Model 을 사용 하여 이 데이터 항목 을 조직 하여 목록, 표 또는 트 리 를 만들어 다른 보기 류 에 표시 하 는 방법 을 논술 합 니 다.
앞에서 말 한 바 와 같이 하나의 데이터 항목 은 몇 개의 '역할, 데이터 서브 항목' 으로 구성 된다.클래스 QStandardItem 은 이 데 이 터 를 저장 하고 방문 합 니 다.이러한 종류의 내 부 는 QVector 라 는 용 기 를 정의 합 니 다. 모든 용기 요 소 는 본질 적 으로 '역할, 데이터 하위 항목' 을 저장 합 니 다.
각 캐릭터 에 대응 하 는 데이터 하위 항목 이 서로 다른 유형 을 가 질 수 있 기 때문에 Qt 는 QVariant 를 사용 하여 각 데이터 하위 항목 을 저장 합 니 다.사용자 가 일부 데 이 터 를 QStandard Item 대상 에 저장 하려 고 할 때 구성원 함 수 를 호출 할 수 있 습 니 다.
- void setData ( const QVariant & value, int role)
"role, value" 를 대 입 합 니 다.사용자 가 이 대상 의 데 이 터 를 읽 으 려 고 할 때 다른 구성원 함 수 를 호출 할 수 있 습 니 다.
- 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
- QStandardItemModel listModel;
- QStandardItem *rootItem = listModel.invisibleRootItem(); ①
- for (int row = 0; row < 4; ++row) {
- QStandardItem *item = new QStandardItem(QString("%0").arg(row) );②
- rootItem->appendRow( item ); ③
- }
- QListView listView;
- listView.setModel ( & listModel );
데이터 세트 가 표 로 표시 되면 클래스 QStandardItemModel 의 구성원 함수 setItem () 을 호출 하여 표 의 데이터 항목 을 설정 할 수 있 습 니 다. 예 를 들 어 코드 세그먼트 1311 참조.이 코드 세그먼트 의 데이터 세트 는 표 이기 때문에 이 데이터 세트 를 QTableView 로 표시 합 니 다.
코드 세그먼트 13 11, QStandardItemModel 처리 표를 사용 하여 z: \ examples \ \ mvc \ \ QStandardItemModeldemo\main.cpp
- QStandardItemModel tableModel(4, 4);
- for (int row = 0; row < 4; ++row) {
- for (int column = 0; column < 4; ++column) {
- QStandardItem *item = new QStandardItem(
- QString("%0,%1").arg(row).arg(column));
- tableModel.setItem(row, column, item);
- }
- }
- QTableView tableView;
- tableView.setModel( & tableModel );
데이터 세트 가 하나의 트 리 로 표시 되면 클래스 QStandardItemModel 의 구성원 함수 appendRow () 를 호출 하여 특정한 트 리 노드 에 하위 노드 를 추가 할 수 있 습 니 다.이 함 수 를 여러 번 호출 하면 복잡 한 나 무 를 만 들 수 있 습 니 다.코드 세그먼트 13 12 는 간단 한 나 무 를 구축 합 니 다. 맨 위 에 있 는 뿌리 노드 는 '0' 의 하위 노드 가 있 고 이 하위 노드 는 '1' 의 하위 노드 가 있 습 니 다.이에 따라 '1' 자 노드 는 '2' 자 노드 가 있 고 '2' 자 노드 는 '3' 자 노드 가 있어 깊이 가 4 인 나 무 를 형성한다.이 나무의 모든 노드 는 형제 노드 가 없다 (같은 부모 노드 를 가 진 여러 노드 는 서로 형제 노드 라 고 부른다). 관심 이 있 는 독 자 는 이 코드 를 수정 하여 그 중의 일부 노드 가 형제 노드 를 가지 도록 할 수 있다.데이터 세트 가 나무 이기 때문에, 우 리 는 QTreeView 를 사용 하여 그것 을 표시 합 니 다.
본문 출처:http://book.51cto.com/art/201207/347880.htm
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.