본문 바로가기
C++ 200제/코딩 IT 정보

[Qt GUI 프로그래밍] 트리뷰 사용 예제, QTreeView와 QFile 응용

by vicddory 2017. 9. 9.

[Qt GUI 프로그래밍] 트리뷰 사용 예제, QTreeView와 QFile 응용


Qt QTreeView와 QFile을 함께 사용한 GUI 프로그래밍 예제입니다. 우선 결과 화면부터 보여드릴게요.


Qt 트리뷰 QTreeView[Qt] QTreeView, QFile 예제


제가 소개하는 소스는 특정 폴더의 ini 파일만 읽어 ini 내용을 트리뷰로 표현하는 것입니다. GUI 프로그래밍에서 자주 사용하는 것 중 하나인 트리뷰(QTreeView)는 부모와 자식 노드로 구성되는데요.


ini 파일 이름은 부모 노드, ini 파일 내용은 자식 노드로 구성되어 있습니다.


.ini 부모 노드(파일 이름) 아래에 자식 노드(ini 파일 내용)가 보이시죠? 아래 소개하는 소스는 위 Qt GUI 프로그래밍 트리뷰 소스입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
void ExamProject::LoadIni(const QString path)
{
    ui->treeView->reset(); // 트리뷰 요소 모두 지움
 
    QStringList filters;
    filters += "*.ini";
 
    // path 경로에서 ini 파일만 불러옴
    QDirIterator dir_iter(path, filters, QDir::Files | QDir::NoSymLinks);
 
    QFile file;
 
    // 트리뷰에 넣을 아이템 초기화
    QStandardItemModel *model = new QStandardItemModel();
    
    // 읽지못한 ini 파일이 존재하면 반복
    while (dir_iter.hasNext())
    {
        dir_iter.next(); // 다음 ini 읽음
 
        file.setFileName(path + "/" + dir_iter.fileName());
        file.open(QIODevice::ReadOnly);
 
        QTextStream read(&file);
 
        // ini 파일 이름을 타이틀로 트리뷰에 넣음
        QStandardItem *item = new QStandardItem(dir_iter.fileName());
        model->appendRow(item);
 
        // ini 파일 내용 읽어서 item에 추가
        while (!read.atEnd())
            item->appendRow(new QStandardItem(read.readLine()));
 
        // 트리뷰에 ini 파일 내용 추가
        ui->treeView->setModel(model);
        file.close();
    }
 
    // 트리뷰 컬럼 타이틀 설정
    QString header_title = 
        QString::fromLocal8Bit("%1개 ini 파일 발견").arg(model->rowCount());
 
    model->setHeaderData(0, Qt::Horizontal, header_title);
 
    filters.clear();
}
cs


소스를 이해하기 어렵진 않으실 거예요. 클래스 성격만 알면 간단히 이해할 수 있습니다.


QDirIterator : 폴더 내부 파일 순회


QStandradItemModel : 트리뷰 자체 아이템 컨트롤러

QStandardItem : 트리뷰에 삽입될 부모와 자식 노드

- QStandradItemModel에 삽입하면 부모 노드

- QStandardItem에 삽입하면 자식 노드


마지막에 있는 setHeaderData는 컬럼 이름을 의미합니다. "5개 ini 파일 발견"이라는 컬럼 이름을 여기서 설정하죠.


Qt GUI 프로그래밍도 그렇고 일반 GUI 프로그래밍도 그렇지만, 일반적으로 내부 데이터를 다루는 클래스는 별도로 존재합니다. Qt QTreeView에선 바로 위 박스안에 있는 클래스들이 담당합니다.


이것으로 Qt GUI 프로그래밍 QTreeView 예제 소개는 마치고, 혹시 궁금한 점이 있다면 댓글 달아주세요.


[Qt GUI 프로그래밍] 트리뷰 사용 예제, QTreeView와 QFile 응용

댓글